[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.아래와 같이 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.요청에 "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());
from https://stackoverflow.com/questions/32623407/add-my-custom-http-header-to-spring-resttemplate-request-extend-resttemplate by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 빈에 매개 변수를 동적으로 전달하는 방법 (0) | 2019.03.14 |
---|---|
[SPRING] MultipartException : 현재 요청이 다중 요청이 아닙니다. (0) | 2019.03.14 |
[SPRING] 요소 "context : component-scan"에 대한 접두어 "context"는 바인딩되지 않습니다. (0) | 2019.03.14 |
[SPRING] Spring이 다중 컨텍스트를 사용하여 통합 테스트 클래스를 autowire하는 방법 (0) | 2019.03.14 |
[SPRING] LOG_PATH_IS_UNDEFINED 폴더를 만드는 LogBack으로 봄 부팅 (0) | 2019.03.14 |