У меня ниже XML, который я получаю от третьей стороны (служба отдыха)
<response>
<error>Document Too Small</error>
<error>Barcode Not Detected</error>
<error>Face Image Not Detected</error>
</response>
Я звоню сторонней службе с кодом ниже, который пытается преобразовать XML в соответствующий объект Java -
restTemplate.postForObject("/test", new HttpEntity<>(request, headers), Eror.class);
Мы добавили MappingJackson2XmlHttpMessageConverter-
MappingJackson2XmlHttpMessageConverter converter = new MappingJackson2XmlHttpMessageConverter();
converter.getObjectMapper().registerModule(new JaxbAnnotationModule());
Ниже приведен код Eror.class -
@XmlRootElement(name = "response")
public class Eror {
private List<String> error;
public List<String> getError() {
return error;
}
public void setError(List<String> error) {
this.error = error;
}
}
Тот же код работает хорошо, если у нас есть простые типы, такие какstring, int, но проблема возникает, когда у нас есть список строк.Я получаю следующее исключение -
Exception cause -
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `java.util.ArrayList` out of VALUE_STRING token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList` out of VALUE_STRING token
К вашему сведению, если я выполнял ручной анализ с xml на соответствующую java с использованием jaxb marshaller, как показано ниже, он работал правильно -
JAXBContext jaxbContext = JAXBContext.newInstance(Eror.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Eror err = (Eror) jaxbUnmarshaller.unmarshal(new File("c:/error.xml"));
Любая помощьвысоко ценится.