1

为什么 MappingJackson2XmlView 不允许转换包含多个对象的模型?
请参阅 MappingJackson2XmlView.class 第 90 行:
throw new IllegalStateException("Model contains more than one object to render, only one is supported");

4

1 回答 1

1

这是因为没有将列表转换为 XML 的默认方法:文档必须只有一个根元素。虽然在 JSON 中返回的未命名列表是有效的,但在 XML 中就不行了。您需要指定一个中间类来保存列表。如果你使用 aMarshallingView和 a Jaxb2Marshaller,你可以这样做并且仍然提供原始 JSON 列表

<property name="defaultViews">
    <list>
        <!-- JSON -->
        <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />

        <!-- XML -->
        <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
            <constructor-arg>
                <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
                    <property name="packagesToScan" value="example.model" />
                </bean>
            </constructor-arg>
        </bean>
    </list>
</property>

在这里,example.model.FooCollection将只包含一个列表example.model.Foo,并定义它自己的@XmlRootElement.

于 2016-05-23T05:46:08.450 回答