Spring mvc Spring MVC 3.2-XStreamAlias被忽略
Person.java:Spring mvc Spring MVC 3.2-XStreamAlias被忽略,spring-mvc,xstream,Spring Mvc,Xstream,Person.java: @XStreamAlias("person") public class Person { @XStreamAlias("id") private Long personProfileId; private String lastName; private String firstName; private String middleName; private String nameSuffix; private
@XStreamAlias("person")
public class Person {
@XStreamAlias("id")
private Long personProfileId;
private String lastName;
private String firstName;
private String middleName;
private String nameSuffix;
private String namePrefix;
// etc ...
}
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="annotatedClasses">
<array>
<value>com.example.myapp.model.Person</value>
</array>
</property></bean>
</constructor-arg>
</bean>
</list>
</property>
弹簧配置:
<bean id="contentNegotiationManager"
class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false" />
<property name="favorParameter" value="true" />
<property name="ignoreAcceptHeader" value="true" />
<property name="useJaf" value="false" />
<property name="defaultContentType" value="application/xml" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</map>
</property>
</bean>
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="contentNegotiationManager" ref="contentNegotiationManager" />
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller" />
</constructor-arg>
</bean>
</list>
</property>
</bean>
<mvc:annotation-driven
content-negotiation-manager="contentNegotiationManager" />
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="annotatedClasses">
<array>
<value>com.example.myapp.model.Person</value>
</array>
</property></bean>
</constructor-arg>
</bean>
</list>
</property>
调用返回:
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="annotatedClasses">
<array>
<value>com.example.myapp.model.Person</value>
</array>
</property></bean>
</constructor-arg>
</bean>
</list>
</property>
1.
麦卡特尼
詹姆斯
保罗
2.
列侬
约翰
温斯顿
3.
斯塔基
理查德
4.
哈里森
乔治
我希望它能回来:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<Person>
<id>1</id>
<lastName>McCartney</lastName>
<firstName>James</firstName>
<middleName>Paul</middleName>
</Person>
<Person>
<id>2</id>
<lastName>Lennon</lastName>
<firstName>John</firstName>
<middleName>Winston</middleName>
</Person>
<Person>
<id>3</id>
<lastName>Starkey</lastName>
<firstName>Richard</firstName>
</Person>
<Person>
<id>4</id>
<lastName>Harrison</lastName>
<firstName>George</firstName>
</Person>
</list>
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="annotatedClasses">
<array>
<value>com.example.myapp.model.Person</value>
</array>
</property></bean>
</constructor-arg>
</bean>
</list>
</property>
1.
麦卡特尼
詹姆斯
保罗
2.
列侬
约翰
温斯顿
3.
斯塔基
理查德
4.
哈里森
乔治
似乎调用XStream将对象转换为XML是正确的,但是忽略了@XStreamAlias注释。是否需要进一步配置才能使其正常工作?解决了这个问题。带注释的类需要显式地标识给XStreamMarshaller
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="annotatedClasses">
<array>
<value>com.example.myapp.model.Person</value>
</array>
</property></bean>
</constructor-arg>
</bean>
</list>
</property>
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="annotatedClasses">
<array>
<value>com.example.myapp.model.Person</value>
</array>
</property></bean>
</constructor-arg>
</bean>
</list>
</property>
com.example.myapp.model.Person
我试图解决同样的问题(尽管是在Spring Boot项目中),并找到了另一个选择:
自动检测旋转
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="annotatedClasses">
<array>
<value>com.example.myapp.model.Person</value>
</array>
</property></bean>
</constructor-arg>
</bean>
</list>
</property>
xstreamMarshaller.setAutodetectAnnotations(true);
,将上述行添加到Application.java 根据XStream文档
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="annotatedClasses">
<array>
<value>com.example.myapp.model.Person</value>
</array>
</property></bean>
</constructor-arg>
</bean>
</list>
</property>
您必须使用xstream.processAnnotations(MyPOJO.class)代码>您不也希望元素是元素吗?同样,XStream().setAutodetectAnnotations(true)也可以工作(对于非Spring项目)。
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="annotatedClasses">
<array>
<value>com.example.myapp.model.Person</value>
</array>
</property></bean>
</constructor-arg>
</bean>
</list>
</property>