[SPRING] RestTemplate GET 응답이 XML에 있어야 할 때 JSON에 있어야하는 이유는 무엇입니까?
SPRINGRestTemplate GET 응답이 XML에 있어야 할 때 JSON에 있어야하는 이유는 무엇입니까?
나는 성공없이 RestTemplate (org.springframework.web.client.RestTemplate)을 사용하여 매우 유연한 스프링 동작으로 고생했습니다.
코드 아래에있는 구멍 애플리케이션에서 사용하고 항상 XML 응답을받습니다. XML 응답을 파싱하고 평가합니다.
String apiResponse = getRestTemplate().postForObject(url, body, String.class);
하지만 서버 응답이 JSON 형식으로 된 이유는 다음과 같습니다.
String apiResponse = getRestTemplate().getForObject(url, String.class);
낮은 수준의 RestTemplate에서 디버깅을했는데 컨텐츠 유형이 XML이지만 왜 결과가 JSON인지 알 수 없습니다.
브라우저에서 액세스 할 때 응답은 XML에도 있지만 apiResponse에서 JSON을 얻었습니다.
Spring documentation을 읽은 후에 많은 옵션을 시도했다. http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/client/RestTemplate.html
또한 헤더를 명시 적으로 수정하려고 시도했지만 여전히 파악할 수 없습니다.
RestTemplate 클래스를 디버깅하고이 메서드는 항상 application / json을 설정한다는 것을 알았습니다.
public void doWithRequest(ClientHttpRequest request) throws IOException {
if (responseType != null) {
List<MediaType> allSupportedMediaTypes = new ArrayList<MediaType>();
for (HttpMessageConverter<?> messageConverter : getMessageConverters()) {
if (messageConverter.canRead(responseType, null)) {
List<MediaType> supportedMediaTypes = messageConverter.getSupportedMediaTypes();
for (MediaType supportedMediaType : supportedMediaTypes) {
if (supportedMediaType.getCharSet() != null) {
supportedMediaType =
new MediaType(supportedMediaType.getType(), supportedMediaType.getSubtype());
}
allSupportedMediaTypes.add(supportedMediaType);
}
}
}
if (!allSupportedMediaTypes.isEmpty()) {
MediaType.sortBySpecificity(allSupportedMediaTypes);
if (logger.isDebugEnabled()) {
logger.debug("Setting request Accept header to " + allSupportedMediaTypes);
}
request.getHeaders().setAccept(allSupportedMediaTypes);
}
}
}
아이디어를 줄 수 있습니까?
해결법
-
==============================
1.나는 RC의 도움으로 내 문제를 해결할 수 있었다. 나는 다른 사람들을 돕기 위해 답을 게시 할 것이다.
나는 RC의 도움으로 내 문제를 해결할 수 있었다. 나는 다른 사람들을 돕기 위해 답을 게시 할 것이다.
문제는 Accept 헤더가 자동으로 APPLICATION / JSON으로 설정 되었기 때문에 원하는 Accept 헤더를 제공하기 위해 서비스를 호출하는 방법을 변경해야한다는 것이 었습니다.
나는 이것을 바꿨다 :
String response = getRestTemplate().getForObject(url, String.class);
응용 프로그램이 작동하게하려면 다음과 같이하십시오.
// Set XML content type explicitly to force response in XML (If not spring gets response in JSON) HttpHeaders headers = new HttpHeaders(); headers.setAccept(Arrays.asList(MediaType.APPLICATION_XML)); HttpEntity<String> entity = new HttpEntity<String>("parameters", headers); ResponseEntity<String> response = getRestTemplate().exchange(url, HttpMethod.GET, entity, String.class); String responseBody = response.getBody();
from https://stackoverflow.com/questions/21613416/why-resttemplate-get-response-is-in-json-when-should-be-in-xml by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 점프 나머지 템플릿 URL 인코딩 (0) | 2019.03.22 |
---|---|
[SPRING] JSP에서 스프링 빈을 자동으로 정리하는 가장 깨끗한 방법은 무엇입니까? (0) | 2019.03.22 |
[SPRING] 비활성 시간이 지나면 연결이 중단됩니다. (0) | 2019.03.22 |
[SPRING] Spring Security 커스텀 인증 실패 핸들러가 매개 변수로 리디렉션 (0) | 2019.03.22 |
[SPRING] PostGIS Geometry로 Hibernate 지속 실패 (0) | 2019.03.22 |