使用Spring Boot(2.1.4)和Jackson(2.9.8),我正在使用@RestController和@RequestBody编写一个使用和生成XML的API。
使用XML可以,但是效果有点好:当根元素与我的Java对象(用@JacksonXmlRootElement localName注释)不匹配时,它仍然可以取消编组对象。
其余控制器看起来像这样:
@RestController
@RequestMapping(value = "api", produces = MediaType.APPLICATION_XML_VALUE, consumes = MediaType.APPLICATION_XML_VALUE)
public class PutawayApiController extends BaseController {
private final ModelSampleService sampleService;
@Autowired
public PutawayApiController(ModelSampleService sampleService) {
this.sampleService = sampleService;
}
@PostMapping(value = "/putaway_close")
public PutawayCloseResponse putawayClose(@RequestBody PutawayCloseRequest request) {
return sampleService.putawayCloseResponse();
}
}
请求对象为:
@Data
@EqualsAndHashCode(callSuper = false)
@JacksonXmlRootElement(localName = "putawayCloseRequest")
public class PutawayCloseRequest extends BaseRequest {
private String shipmentRef;
}
它继承自:
@Data
public abstract class BaseRequest {
private String userId;
}
在Postman中执行以下调用时,它将触发我的调试点,如下图所示:
即使根元素显然不是我配置的内容,为什么也要取消编组?根元素不匹配时,是否有办法拒绝解组?
谢谢。
答案 0 :(得分:0)
因为文档,即@JacksonXmlRootElement
的Javadoc说:
可用于定义用于根级对象序列化时的根元素名称的注释,该字符通常使用类型(类)的名称。
在反序列化时,它从不声称会使用它进行验证。