即使错误的 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).

它从未声称在反序列化时使用它进行验证。