Как проверить XML-запрос REST в Springboot с помощью Jaxb? - PullRequest
0 голосов
/ 06 июля 2018

Я думал, что это будет так же просто, как добавить аннотацию, но я не могу найти решение этой проблемы.

У меня есть простая конечная точка, которая принимает тело XML-запроса:

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

Где ImportRequest - это класс JAXB, созданный из XSD. Это прекрасно работает, когда клиент отправляет запрос, но если запрос недействителен, ошибки нет.

Может кто-нибудь предложить лучший способ проверки этого тела запроса с учетом XSD?

Спасибо

1 Ответ

0 голосов
/ 06 июля 2018

Спасибо, Алекс,

Я видел этот ответ ранее, но я снова посмотрел на свой код и обнаружил ошибку:)

@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, и второй вызов удалил первые схемы.

...