, поэтому я довольно новичок в Spring MVC и строю приложение, в котором размещаются + использует несколько API, большая часть из них работает нормально, но теперь я столкнулся с стеной.Сопоставление объекта с Spring MVC REST
По какой-то причине атрибуты из xml не отображаются в объекте. У меня не было этой проблемы с JSON, но, к сожалению, в этом случае я нахожусь на получающей стороне, и я не могу изменить формат запроса. Запрос полезного что-то вроде:
<xml>
<ToUserName> <![CDATA[toUser]]> </ToUserName>
<FromUserName> <![CDATA[fromUser]]> </FromUserName>
<CreateTime> 1348831860 </CreateTime>
<MsgType> <![CDATA[text]]> </MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>123456789</MsgId>
</xml>
Я пытаюсь отобразить его на класс, который имеет следующие + много больше атрибутов, но те, могут оставаться пустыми, когда не требуется. Теперь мой метод контроллера:
@RequestMapping(value = "/msg", method = RequestMethod.POST, consumes = "application/xml", produces = "application/xml")
@ResponseBody
public void receive(@RequestBody ReceivedMessage msg) {
//TODO: do something with the message here... for now just dump into log
System.out.println(msg);
}
Похоже, он должен работать, не так ли? Ну, выход идет как
ReceivedMessage{toUserName=null, fromUserName=null, createTime=null, msgType=null, msgId=null, medes=null, content=null, picUrl=null, format=null, thumbMediaId=null, location_X=null, location_Y=null, label=null, scale=null, title=null, description=null, url=null, recognition=null, event=null, eventKey=null, ticket=null, latitude=null, longitude=null, precision=null}
Как вы можете видеть, все атрибуты равны нулю, даже те, которые указаны в полезной нагрузке ...
Я предполагаю, что это может иметь что-то делать с как структурирована полезная нагрузка, но, как я уже сказал, я не могу это изменить.
Любая помощь с благодарностью, спасибо.
EDIT: Исправлена опечатка в названии ... EDIT2: дальнейшая информация ... соответствующая часть сервлетов конфигурации:
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
<bean id="xmlConverter" class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter"/>
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
<ref bean="xmlConverter" />
</list>
</property>
</bean>
EDIT3: ReceivedMessage (добытчиками и сеттеров опущены):
public class ReceivedMessage{
//common
private String toUserName;
private String fromUserName;
private Long createTime;
private String msgType;
private Long msgId;
private String medes;
//text
private String content;
//image
private String picUrl;
//voice + speech recognition
private String format;
//video
private String thumbMediaId;
//location
private Double location_X;
private Double location_Y;
private String label;
private Double scale;
//link
private String title;
private String description;
private String url;
//speech recognition
private String recognition;
//event + QR code scan + location incident + menu event
private String event;
//QR code scan + menu event
private String eventKey;
//QR code scan
private String ticket;
//location incident
private Double latitude;
private Double longitude;
private Double precision;
public ReceivedMessage() {
}
}
Так как вы хотите, чтобы преобразовать XML в объект Java и наоборот, вам нужно использовать JAXB для сортировочных и немаршалинг , Весной это могут быть готовые преобразователи сообщений, такие как Jaxb2RootElementHttpMessageConverter. – Mithun
Просьба поделиться содержимым класса «ReceivedMessage». – Mithun
Класс @Mithun добавлен, в настоящее время рассматривается Jaxb2RootElementHttpMessageConverter – OsaSoft