如何使用Jaxb在Springboot中验证XML REST请求?

时间:2018-07-06 12:42:01

标签: spring rest validation xsd jaxb

我认为这就像添加注释一样容易,但是我找不到解决方案。

我有一个采用XML请求正文的简单端点:

@RequestMapping(value = "/import", method = RequestMethod.POST, consumes = MediaType.TEXT_XML_VALUE)
public ResponseEntity<Result> importReceipts(@Valid @RequestBody ImportRequest request) throws Exception {

其中ImportRequest是从XSD生成的JAXB类。当客户端发送请求时,此方法工作正常,但如果请求无效,则不会出现错误。

在给定XSD的情况下,任何人都可以建议验证此请求正文的最佳方法吗?

谢谢

1 个答案:

答案 0 :(得分:1)

感谢亚历克斯,

我早些时候看到了这个响应,但是我再次查看了我的代码并发现了错误:)

@Bean
public MarshallingHttpMessageConverter marshallingHttpMessageConverter()
{
    MarshallingHttpMessageConverter marshallingHttpMessageConverter = new MarshallingHttpMessageConverter();

    marshallingHttpMessageConverter.setMarshaller(jaxb2Marshaller());
    marshallingHttpMessageConverter.setUnmarshaller(jaxb2Marshaller());

    return marshallingHttpMessageConverter;
}

@Bean
public Jaxb2Marshaller jaxb2Marshaller()
{
    Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
    jaxb2Marshaller.setSchemas(new ClassPathResource("Import.xsd"), new ClassPathResource("BasicTypes.xsd"));
    jaxb2Marshaller.setClassesToBeBound(Import.class);
    return jaxb2Marshaller;
}

我有一个错字,但是主要的问题是我多次调用了jaxb2Marshaller.setSchemas,第二次调用删除了第一个模式。