我有一个像下面这样的休息端点,它应该接受XML输入,对它进行一些处理,然后以XML格式返回响应。
@RequestMapping(value = "/rest/v1/test/listener", method = RequestMethod.POST)
public ResponseEntity<MyResponseType> processBooking(@RequestBody MyRequest myRequest) throws JAXBException {
MyResponseType response = myService.process(myRequest);
// ... do something with it and generate 'response'
return new ResponseEntity<>(response, HttpStatus.OK);
}
MyRequest
类如下所示,它是通过jaxb和外部xsd自动生成的,我无法更改(详细信息从类中省略)
/**
* MyRequest
*/
public class MyRequest {
@XmlElement(required = true)
@XmlSchemaType(name = "string")
protected SomeEnum someEnum;
...
@XmlType(name = "SomeEnum")
@XmlEnum
public enum SomeEnum {
ACTIVITY,
DEPOSIT,
EQUIPMENT,
FEE,
MISC,
PROTECTION,
RENTAL,
TAX,
DISCOUNT;
public static SomeEnum fromValue(String v) {
return valueOf(v);
}
public String value() {
return name();
}
}
}
问题是,当我尝试运行它时,我收到以下错误消息
2018-04-09 11:47:59.378 WARN 2702 --- [主要] .w.s.m.s.DefaultHandlerExceptionResolver:无法读取HTTP 信息: org.springframework.http.converter.HttpMessageNotReadableException: JSON解析错误:无法构造MyRequest.SomeEnum的实例:no 从String反序列化的String-argument构造函数/工厂方法 价值(&#39; MISC&#39;);嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:无法构造 MyRequest.SomeEnum的实例:没有String-argument构造函数/工厂 从String值反序列化的方法(&#39; MISC&#39;)
我作为输入发送的示例xml是
<myRequest>
...
<advertiserAssignedId>19ABC12331</advertiserAssignedId>
<listingExternalId>ABC123</listingExternalId>
<unitExternalId>ABC123</unitExternalId>
<someEnum>
<name>MISC</name>
<feeType>MISC</feeType>
...
</someEnum>
...
</myRequest>
答案 0 :(得分:0)
您必须使用consumes attribut指定您的终端消费内容。
当您将请求发布到您的终端时,请不要忘记将Content-type
标题设置为application/xml