복붙노트

[SPRING] 내 사용자 지정 HTTP 헤더를 Spring RestTemplate 요청에 추가 / RestTemplate 확장

SPRING

내 사용자 지정 HTTP 헤더를 Spring RestTemplate 요청에 추가 / RestTemplate 확장

내 현재 코드 :

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Mall[] malls = restTemplate.getForObject(url, Mall[].class);

양식에서 요청에 대한 사용자 지정 헤더를 추가해야합니다.

X-TP-DeviceID : <GUID>

제 경우에 그렇게하는 가장 간단한 방법은 무엇입니까? 서버에 요청을 보내기 전에 내 restTemplate 객체에 사용자 정의 헤더 정의를 추가 할 수있는 방법이 있습니까?

[편집하다]

맞습니까?

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

    HttpHeaders headers = new HttpHeaders();
    headers.set("X-TP-DeviceID", "1234567890");
    HttpEntity entity = new HttpEntity(headers);

    HttpEntity<Mall[]> response = restTemplate.exchange(url, HttpMethod.GET, entity, Mall[].class);

    Mall[] malls = response.getBody();

[추가]

그래서, 나는 그것을 얻을 수 있었다. 그러나, 나는 그것에 완전히 만족하지 않습니다. 필자의 경우 모든 호출에 대해 동일한 사용자 정의 헤더를 제공해야합니다.

그래서, 다음 질문입니다 - 예를 들어, RestTemplate 클래스를 확장하고 거기에 모든 사용자 정의 헤더를 넣는 것과 같이 각 웹 서비스 호출에 자동으로 추가되도록 내 사용자 정의 헤더를 설정할 수 있습니까? 그럼, 내가 할 필요가 단순히 주식 확장 대신 RestTemplate 내 사용자 정의 확장을 사용하는 것입니다, 그리고 내 모든 사용자 정의 헤더가 기본적으로 존재합니다.

해결법

  1. ==============================

    1.아래와 같이 RestTemplate 교환 방식으로 사용자 정의 HTTP 헤더를 전달할 수 있습니다.

    아래와 같이 RestTemplate 교환 방식으로 사용자 정의 HTTP 헤더를 전달할 수 있습니다.

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON }));
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("X-TP-DeviceID", "your value");
    
    HttpEntity<RestRequest> entityReq = new HttpEntity<RestRequest>(request, headers);
    
    RestTemplate template = new RestTemplate();
    
    ResponseEntity<RestResponse> respEntity = template
        .exchange("RestSvcUrl", HttpMethod.POST, entityReq, RestResponse.class);
    

    편집 : 아래는 업데이트 된 코드입니다. 이 링크에는 몇 가지 방법으로 휴식 서비스를 호출 할 수있는 예제가 있습니다.

    RestTemplate restTemplate = new RestTemplate();
    
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("X-TP-DeviceID", "your value");
    
    HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
    
    ResponseEntity<Mall[]> respEntity = restTemplate.exchange(url, HttpMethod.POST, entity, Mall[].class);
    
    Mall[] resp = respEntity.getBody();
    
  2. ==============================

    2.요청에 "User-Agent"헤더를 추가하십시오.

    요청에 "User-Agent"헤더를 추가하십시오.

    일부 서버는 스파이더 링 프로그램과 스크래이저가 서버에 액세스하는 것을 차단하려고합니다. 왜냐하면 초기에는 요청이 사용자 에이전트 헤더를 보내지 않았기 때문입니다.

    사용자 지정 사용자 에이전트 값을 설정하거나 "Mozilla / 5.0 Firefox / 26.0"과 같은 브라우저를 식별하는 값을 사용하십시오

        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
    
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.add("user-agent", "Mozilla/5.0 Firefox/26.0");
        headers.set("user-key", "your-password-123"); // optional - in case you auth in headers
        HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
        ResponseEntity<Game[]> respEntity = restTemplate.exchange(url, HttpMethod.GET, entity, Game[].class);
    
        logger.info(respEntity.toString());
    
  3. from https://stackoverflow.com/questions/32623407/add-my-custom-http-header-to-spring-resttemplate-request-extend-resttemplate by cc-by-sa and MIT license