Как проверить запрос XML REST в Springboot с помощью Jaxb?

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

У меня есть простая конечная точка, которая принимает тело запроса 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?

Спасибо

Эй, ты проверял это stackoverflow.com/questions/34929016/…? Создание jaxb-компонента и добавление схем в его конфигурацию, похоже, решает проблемы.

Alex Ciocan 06.07.2018 14:55
0
1
2 123
1

Ответы 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 более одного раза, а второй вызов удалял первые схемы.

Другие вопросы по теме