即使错误的 XML 根元素,Jackson 解组也会成功
Jackson unmarshalling succeeds even though wrong XML root element
使用 Spring Boot (2.1.4) 和 Jackson (2.9.8),我正在使用 @RestController 和 @ 编写消耗和生成 XML 的 API请求体。
Consuming 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 中执行以下调用时,它触发了我的调试点,如下图所示:
为什么即使根元素显然不是我配置的,它也会解组?有没有办法在根元素不匹配时拒绝解组?
提前致谢。
因为 文档,即 @JacksonXmlRootElement
的 javadoc 说:
Annotation that can be used to define name of root element used for the root-level object when serialized, which normally uses name of the type (class).
它从未声称在反序列化时使用它进行验证。
使用 Spring Boot (2.1.4) 和 Jackson (2.9.8),我正在使用 @RestController 和 @ 编写消耗和生成 XML 的 API请求体。
Consuming 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 中执行以下调用时,它触发了我的调试点,如下图所示:
为什么即使根元素显然不是我配置的,它也会解组?有没有办法在根元素不匹配时拒绝解组?
提前致谢。
因为 文档,即 @JacksonXmlRootElement
的 javadoc 说:
Annotation that can be used to define name of root element used for the root-level object when serialized, which normally uses name of the type (class).
它从未声称在反序列化时使用它进行验证。