Spring + xstream:字段未按正确顺序显示

时间:2013-03-12 21:40:13

标签: spring rest xstream

所以我正在使用XStream来创建我的xml rest响应,而且我对字段顺序有点麻烦。它与转换类中定义的顺序不匹配,也没有与1.2.2版本中提到的问题之一相反的声明顺序(我正在使用1.4.4版本)。

所以,如果我的班级看起来像:

person:
    name
    age
    gender

输出中的顺序是

age gender name

有没有人对如何订购有任何建议? 我能找到的大多数帖子都是指setter的顺序,但我只是使用Person构造函数并让spring + XStream自动处理转换。

编辑: 配置部分:

<bean
        class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="1" />
        <property name="mediaTypes">
            <map>
                <entry key="xml" value="application/xml"/>

    </map>
        </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="autodetectAnnotations" value="true" />
                            <property name="supportedClasses">
                                <list>
                                    <value>com.jackdans.model.InterestingPeople</value>
                                </list>
                            </property>
                        </bean>
                    </constructor-arg>
                </bean>
            </list>
        </property>
    </bean>

1 个答案:

答案 0 :(得分:1)

来自FAQ ...

SortableFieldKeySorter sorter = new SortableFieldKeySorter();
sorter.registerFieldOrder(Person.class, new String[] { "name", "age", "gender" });
xstream = new XStream(new Sun14ReflectionProvider(new FieldDictionary(sorter)));

如果你想将它与Spring集成,那就另当别论了。您可能需要创建一个XStream工厂或提供一个类似于上面代码的自定义实现。