org.springframework.web.HttpMediaTypeNotSupportedException:不支持内容类型 'application/xml;charset=UTF-8'
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/xml;charset=UTF-8' not supported
我在调用休息服务时遇到异常。
org.springframework.web.HttpMediaTypeNotSupportedException: Content
type 'application/xml;charset=UTF-8' not supported
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:152)
[spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:181)
[spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]
at
代码
// This method calls the rest service
@Override
public TransactionSearchResults callSearchTransactions(TransactionSearchCriteria criteria, int page, int size) {
HttpEntity<TransactionSearchCriteria> requestEntity = new HttpEntity<TransactionSearchCriteria>(criteria, getCommonHeaders(new HttpHeaders()));
Map<String, Integer> params = new HashMap<String, Integer>();
params.put("size", size);
params.put("page", page);
return restTemplate.exchange(urlBase + "/transaction?size={size}&page={page}", HttpMethod.POST, requestEntity, TransactionSearchResults.class, params).getBody();
}
// Api which caters to rest call
@Controller
@RequestMapping("/transaction")
public class TransactionStatusController extends BaseController { ... }
//Controller method for rest call
@ResponseBody
@RequestMapping(produces = { MediaType.APPLICATION_JSON_VALUE }, method = RequestMethod.POST , consumes = MediaType.APPLICATION_JSON_VALUE)
public com.rest.TransactionSearchResults searchTransactions(@RequestParam(value = "page", required = false) Integer page,
// Using request Param to retireve criteria
@RequestParam(value = "size", required = false) Integer size, @Valid @RequestBody com.rest.TransactionSearchCriteria criteria) {
// This gets relevant results and return it to rest call
return convert(transactionService.search(convert(criteria), page, size));
}
您的控制器实现为仅接受 JSON 值,即 consumes = MediaType.APPLICATION_JSON_VALUE
;因此,错误明确指出 XML 不受支持。
如果 XML 是预期类型更新控制器以包含 MediaType.APPLICATION_XML
或 MediaType.APPLICATION_XML_Value
问题已解决。下面给出的 pom 条目与 jackson 核心库冲突。刚刚删除它,一切正常。
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.4.3</version>
</dependency>
我在调用休息服务时遇到异常。
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/xml;charset=UTF-8' not supported at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:152) [spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:181) [spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE] at
代码
// This method calls the rest service
@Override
public TransactionSearchResults callSearchTransactions(TransactionSearchCriteria criteria, int page, int size) {
HttpEntity<TransactionSearchCriteria> requestEntity = new HttpEntity<TransactionSearchCriteria>(criteria, getCommonHeaders(new HttpHeaders()));
Map<String, Integer> params = new HashMap<String, Integer>();
params.put("size", size);
params.put("page", page);
return restTemplate.exchange(urlBase + "/transaction?size={size}&page={page}", HttpMethod.POST, requestEntity, TransactionSearchResults.class, params).getBody();
}
// Api which caters to rest call
@Controller
@RequestMapping("/transaction")
public class TransactionStatusController extends BaseController { ... }
//Controller method for rest call
@ResponseBody
@RequestMapping(produces = { MediaType.APPLICATION_JSON_VALUE }, method = RequestMethod.POST , consumes = MediaType.APPLICATION_JSON_VALUE)
public com.rest.TransactionSearchResults searchTransactions(@RequestParam(value = "page", required = false) Integer page,
// Using request Param to retireve criteria
@RequestParam(value = "size", required = false) Integer size, @Valid @RequestBody com.rest.TransactionSearchCriteria criteria) {
// This gets relevant results and return it to rest call
return convert(transactionService.search(convert(criteria), page, size));
}
您的控制器实现为仅接受 JSON 值,即 consumes = MediaType.APPLICATION_JSON_VALUE
;因此,错误明确指出 XML 不受支持。
如果 XML 是预期类型更新控制器以包含 MediaType.APPLICATION_XML
或 MediaType.APPLICATION_XML_Value
问题已解决。下面给出的 pom 条目与 jackson 核心库冲突。刚刚删除它,一切正常。
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.4.3</version>
</dependency>