【发布时间】:2018-07-25 17:56:34
【问题描述】:
我只是想发出一个简单的 REST 请求,如下所示
String url = "some url";
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
headers.add(HttpHeaders.AUTHORIZATION, "some authorization");
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Body body = new Body();
body.setRemarks("test");
org.springframework.http.HttpEntity request = new org.springframework.http.HttpEntity(body, headers);
try {
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.PUT, request, String.class);
System.out.println("Status Response: "+ response.getStatusCode() +". Body: "+ response.getBody());
} catch (HttpClientErrorException | HttpServerErrorException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
问题是每次我在 Java 中执行此操作时,结果都是不可预测的,我通常会不断收到此错误。
org.springframework.http.InvalidMediaTypeException: Invalid mime type "text/plain, application/json, application/json, application/*+json, application/*+json, */*; charset=UTF-8": Invalid token character ',' in token "plain, application/json, application/json, application/*+json, application/*+json, */*"
at org.springframework.http.MediaType.parseMediaType(MediaType.java:452)
at org.springframework.http.HttpHeaders.getContentType(HttpHeaders.java:745)
at org.springframework.web.client.DefaultResponseErrorHandler.getCharset(DefaultResponseErrorHandler.java:115)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:531)
但是,当我通过邮递员尝试相同的请求时,它可以工作。我错过了一些非常简单的东西,我不知道是什么。
我检查了 Postman 的响应和标题,它们似乎像 Content-Type →application/json; charset=UTF-8 一样很好,而且响应格式也很好。
我也无法确定请求或响应的哪个部分是哪个 Rest Template 有问题。
【问题讨论】:
-
尝试将杰克逊转换器放在第一个位置
restTemplate.getMessageConverters().add(0, new MappingJackson2HttpMessageConverter());。如果它没有帮助,那么我建议你使用调试器并深入到 RestTemplate。 -
给我们一个完整的restController代码。
-
@SubinCPoonamgode 我没有控制器代码,这是在我试图打的 REST 客户端 API 上,由他们的团队构建。我可以用 Postman 成功地击中它。
标签: java spring resttemplate spring-rest jackson2