Я думал, что это будет так же просто, как добавить аннотацию, но я не могу найти решение.
У меня есть простая конечная точка, которая принимает тело запроса 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?
Спасибо
Спасибо Алекс,
Я видел этот ответ раньше, но снова посмотрел на свой код и заметил ошибку :)
@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 более одного раза, а второй вызов удалял первые схемы.
Эй, ты проверял это stackoverflow.com/questions/34929016/…? Создание jaxb-компонента и добавление схем в его конфигурацию, похоже, решает проблемы.