내 문제를 해결하는 방법에 대한 예를 찾지 못해서 도움을 요청하고 싶습니다. JSON의 RestTemplate 개체를 사용하여 POST 요청을 보낼 수 없습니다.
내가 얻을 때마다 :
org.springframework.web.client.HttpClientErrorException : 415 지원되지 않는 미디어 유형
이 방식으로 RestTemplate을 사용합니다.
...
restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> list = new ArrayList<HttpMessageConverter<?>>();
list.add(new MappingJacksonHttpMessageConverter());
restTemplate.setMessageConverters(list);
...
Payment payment= new Payment("Aa4bhs");
Payment res = restTemplate.postForObject("http://localhost:8080/aurest/rest/payment", payment, Payment.class);
내 잘못이 뭐야?
답변
이 기술은 저에게 효과적이었습니다.
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>(requestJson, headers);
ResponseEntity<String> response = restTemplate.put(url, entity);
이게 도움이 되길 바란다
답변
REST 엔드 포인트를 디버그하려고 할 때이 문제가 발생했습니다. 다음은 내가 사용한 POST 요청을 만들기 위해 Spring의 RestTemplate 클래스를 사용하는 기본 예제입니다. 다른 곳의 코드를 모아서 작동하는 버전을 얻는 데 꽤 오랜 시간이 걸렸습니다.
RestTemplate restTemplate = new RestTemplate();
String url = "endpoint url";
String requestJson = "{\"queriedQuestion\":\"Is there pain in your hand?\"}";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>(requestJson,headers);
String answer = restTemplate.postForObject(url, entity, String.class);
System.out.println(answer);
특정 JSON 파서 내 나머지 끝점은 필드 이름 주위에 필요한 큰 따옴표를 사용했기 때문에 requestJson String에서 큰 따옴표를 이스케이프했습니다.
답변
다음과 같이 JSONObjects와 함께 나머지 템플릿을 사용하고 있습니다.
// create request body
JSONObject request = new JSONObject();
request.put("username", name);
request.put("password", password);
// set headers
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>(request.toString(), headers);
// send request and parse result
ResponseEntity<String> loginResponse = restTemplate
.exchange(urlString, HttpMethod.POST, entity, String.class);
if (loginResponse.getStatusCode() == HttpStatus.OK) {
JSONObject userJson = new JSONObject(loginResponse.getBody());
} else if (loginResponse.getStatusCode() == HttpStatus.UNAUTHORIZED) {
// nono... bad credentials
}
답변
지정된대로 여기 난 당신을 추가 할 필요가 추측 messageConverter
에 대해 MappingJacksonHttpMessageConverter
답변
Spring 3.0을 사용하는 경우 org.springframework.web.client.HttpClientErrorException : 415 Unsupported Media Type 예외 를 피하는 쉬운 방법 은 클래스 경로에 jackson jar 파일을 포함하고 mvc:annotation-driven
config 요소를 사용하는 것 입니다. 여기에 지정된대로 .
mvc-ajax 앱 이 .NET Framework에 대한 특별한 구성없이 작동 하는 이유를 알아 내려고 노력 하고 MappingJacksonHttpMessageConverter
있었습니다. 위에 링크 된 기사를 자세히 읽으면 :
내부적으로 Spring MVC는 직렬화를 수행하기 위해 HttpMessageConverter에 위임합니다. 이 경우 Spring MVC는 Jackson JSON 프로세서에 구축 된 MappingJacksonHttpMessageConverter를 호출합니다. 이 구현은 클래스 경로에 Jackson이있는 mvc : annotation-driven 구성 요소를 사용할 때 자동으로 활성화됩니다 .
답변
“415 Unsupported Media Type”오류는 서버가 POST 요청을 수락하지 않을 것임을 알려줍니다. 귀하의 요청은 절대적으로 괜찮습니다. 잘못 구성된 서버입니다.
MappingJacksonHttpMessageConverter
자동으로 요청 내용 유형 헤더를로 설정하고 application/json
서버가 거부하는 것 같습니다. 하지만 서버 설정에 대해 아무 말도하지 않았으므로 이에 대해 조언 해 드릴 수 없습니다.
답변
나는 이런 식으로하고 있으며 작동합니다.
HttpHeaders headers = createHttpHeaders(map);
public HttpHeaders createHttpHeaders(Map<String, String> map)
{
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
for (Entry<String, String> entry : map.entrySet()) {
headers.add(entry.getKey(),entry.getValue());
}
return headers;
}
// 여기에 헤더 전달
String requestJson = "{ // Construct your JSON here }";
logger.info("Request JSON ="+requestJson);
HttpEntity<String> entity = new HttpEntity<String>(requestJson, headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
logger.info("Result - status ("+ response.getStatusCode() + ") has body: " + response.hasBody());
logger.info("Response ="+response.getBody());
도움이 되었기를 바랍니다