[Spring 학습]RestTemplate 방문 Rest 서비스 총화

4295 단어 프레임
RestTemplate 는 Spring 이 제공 하 는 Rest 서 비 스 를 방문 하 는 클 라 이언 트 입 니 다.RestTemplate 는 원 격 Http 서 비 스 를 편리 하 게 방문 하 는 다양한 방법 을 제공 하여 클 라 이언 트 의 작성 효율 을 크게 향상 시 킬 수 있 습 니 다.RestTemplate 의 기본 구조 함 수 를 호출 합 니 다.RestTemplate 대상 은 바 텀 에서 자바.net 패키지 로 HTTP 요청 을 만 듭 니 다.Client HttpRequestFactory 를 사용 하여 서로 다른 HTTP 요청 방식 을 지정 할 수 있 습 니 다.
Client HttpRequestFactory 인 터 페 이 스 는 주로 두 가지 실현 방식 을 제공 합 니 다.하 나 는 Simple Client HttpRequestFactory 입 니 다.J2SE 가 제공 하 는 방식(java.net 패키지 가 제공 하 는 방식)으로 바 텀 Http 요청 연결 을 만 들 고,또 하 나 는 Http ComponentsClient Http RequestFactory 방식 을 사용 합 니 다.바 텀 은 HttpClient 를 사용 하여 원 격 Http 서 비 스 를 방문 합 니 다.HttpClient 를 사용 하면 연결 풀 과 인증서 등 정 보 를 설정 할 수 있 습 니 다.
RestTemplate 구조 방법:
4.567913.첫 번 째 구조 방법 은 기본 초기 화 를 하고 두 번 째 구조 방법 은 Client HttpRequestFactory 인 자 를 전송 할 수 있 습 니 다.요청 시간 을 설정 하거나 시간 초과 처 리 를 해 야 하기 때 문 입 니 다.Client HttpRequestFactory 인터페이스의 실현 류 에 timeout 속성 이 있어 서 우리 의 수 요 를 만족 시 킬 수 있 습 니 다.
HTTP POST 요청:
public RestTemplate(){
    //     
    messageConverters = new ArrayList();
    errorHandler = new DefaultResponseErrorHandler();
    headersExtractor = new HeadersExtractor();
    messageConverters.add(new ByteArrayHttpMessageConverter());
    messageConverters.add(new StringHttpMessageConverter());//StringHttpMessageConverter      ISO-8859-1,                
    messageConverters.add(new ResourceHttpMessageConverter());
    messageConverters.add(new SourceHttpMessageConverter());
    messageConverters.add(new AllEncompassingFormHttpMessageConverter());
    if(romePresent)
    {
        messageConverters.add(new AtomFeedHttpMessageConverter());
        messageConverters.add(new RssChannelHttpMessageConverter());
    }
    if(jaxb2Present)
        messageConverters.add(new Jaxb2RootElementHttpMessageConverter());
    if(jackson2Present)
        messageConverters.add(new MappingJackson2HttpMessageConverter());
    else
    if(jacksonPresent)
        messageConverters.add(new MappingJacksonHttpMessageConverter());
}

//    
public RestTemplate(ClientHttpRequestFactory requestFactory){
    this();
    setRequestFactory(requestFactory);
}

예시:
public  T postForObject(String url, Object request, Class responseType, Object... uriVariables)
        throws RestClientException
public  T postForObject(String url, Object request, Class responseType, Map uriVariables)
        throws RestClientException
public  T postForObject(URI url, Object request, Class responseType) throws RestClientException

HTTP GET 요청:
/**
 *   RestTemplate  HTTP POST  
 * @param url     
 * @param reqStr     
 * @param connectionTimeout       
 * @param socketTimeout socket    
 * @return String     
 */
 public String postRest(String url, String reqStr,int connetionTimeOut, int socketTimeOut) {

    ResponseEntity responseEntity0 = null;
    HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
    requestFactory.setConnectTimeout(connetionTimeOut);
    requestFactory.setReadTimeout(socketTimeOut);
    RestTemplate restTemplate = new RestTemplate(requestFactory);
    HttpHeaders headers = new HttpHeaders();
    headers.set("Content-Type", "text/plain;charset=UTF-8");//        
    headers.set("Accept", "text/plain;charset=UTF-8");
    headers.set("User-Agent","CLIENT(zk/1.2.1;android/1.0;640*480;MOT-XT800)");
    String body=null;
    try {
        responseEntity0 = restTemplate.postForEntity(url,new HttpEntity(reqStr, headers), String.class);
        logger.debug("    :responseEntity0.getHeaders="+ responseEntity0.getHeaders());
        body=new String(responseEntity0.getBody().getBytes("ISO-8859-1"), "utf-8");//           
        logger.debug("     :responseEntity0.getBody()="+ responseEntity0.getBody());
    } catch (Exception e) {
        logger.error(" errpr happened in postRest(),", e);
    }
    return body;
}
주의:RestTemplate 는 기본적으로 org.springframework.http.converter.stringHttpMessageConverter 를 사용 하여 해석 합 니 다.StringHttpMessageConverter 는 기본적으로 ISO-8859-1 로 인 코딩 되 기 때문에 다시 메 시 지 를 받 을 때 오류 가 발생 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기