RestTemplate를 사용한 헤더를 사용한HTTP get
Spring Rest Template를 사용하여 GET 요청을 전송하려면 어떻게 해야 합니까?다른 질문에서는 POST를 사용하고 있습니다만, GET를 사용할 필요가 있습니다.이 작업을 실행하면 프로그램은 계속 작동하지만, 이 작업이 비동기 태스크에 있기 때문에 네트워크가 막힌 것 같습니다.또, 이 작업의 버튼을 클릭한 후에 다른 비동기 태스크를 실행하려고 하면, 동작하지 않습니다.
하려고 했는데
String url = "https://api.blah.com/2.0/search/cubes?w=jdfkl&whitespace=1";
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
map.add("Bearer", accessToken);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //copied this from somewhere else, not sure what its for
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
HttpMessageConverter<String> stringConverter = new StringHttpMessageConverter();
FormHttpMessageConverter formConverter = new FormHttpMessageConverter();
List<HttpMessageConverter<?>> msgConverters = new ArrayList<HttpMessageConverter<?>>();
msgConverters.add(formConverter);
msgConverters.add(new MappingJacksonHttpMessageConverter());
msgConverters.add(stringConverter);
template.setMessageConverters(msgConverters);
//SetSearchResponseData is my custom class to store the incoming JSON
ResponseEntity<SetSearchResponseData> result = template.exchange(url, HttpMethod.GET, request, SetSearchResponseData.class);
//If I was using post, i could have done SetSearchResponseDataresponse = restTemplate.postForObject(url, request, SetSearchResponseData.class);
RestTemplategetForObject()메서드는 헤더 설정을 지원하지 않습니다.해결책은 이 방법을 사용하는 것입니다.
그래서 대신restTemplate.getForObject(url, String.class, param)(헤더가 없습니다), 사용
HttpHeaders headers = new HttpHeaders();
headers.set("Header", "value");
headers.set("Other-Header", "othervalue");
...
HttpEntity<Void> requestEntity = new HttpEntity<>(headers);
ResponseEntity<String> response = restTemplate.exchange(
url, HttpMethod.GET, requestEntity, String.class, param);
마지막으로 사용response.getBody()결과를 얻을 수 있습니다.
이 질문은 이 질문과 비슷합니다.
JavaDoc for RestTemplate를 참조하십시오.
HTTP GET에 대응하는 메서드가 있습니다.postForObject단, 어느 콜에도 헤더를 지정할 수 없기 때문에, 「GET with headers」요건을 만족시키지 않는 것 같습니다.
JavaDoc을 보면 HTTP GET 고유의 메서드는 헤더 정보를 제공할 수 없습니다.하지만 다른 대안이 있습니다. 그 중 하나를 찾아서 사용하고 있습니다.그exchangemethods를 사용하여HttpEntity요청 세부사항을 나타내는 객체(헤더 포함)그executemethods를 사용하여RequestCallback호출 시 헤더를 추가할 수 있습니다.
RestTemplate의 getForObject() 메서드는 헤더 설정을 지원하지 않습니다.이것을 사용할 수 있다
syntax:
restTemplate.exchange(url 엔드포인트, HttpMethod).GET, 엔티티, 파라미터)
public List<Employee> getListofEmployee()
{
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
ResponseEntity<List<Employee>> response = restTemplate.exchange("http://hello-server/rest/employees",
HttpMethod.GET,entity, new ParameterizedTypeReference<List<Employee>>() {});
return response.getBody(); //this returns List of Employee
}
언급URL : https://stackoverflow.com/questions/16781680/http-get-with-headers-using-resttemplate
'programing' 카테고리의 다른 글
| 반응 탐색 5에서 매개 변수로서의 통과 함수 (0) | 2023.03.31 |
|---|---|
| Angular 5 루트를 클릭할 때마다 맨 위로 스크롤합니다. (0) | 2023.03.31 |
| ReactJs CreateClass가 함수가 아닙니다. (0) | 2023.03.31 |
| MongoDB의 $unwind 연산자는 무엇입니까? (0) | 2023.03.31 |
| 오류 메시지 'java.net.Socket Exception: 소켓 실패: EACCES(권한 거부)' (0) | 2023.03.31 |