Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用XStreamMarshaller Spring生成XML视图_Java_Xml_Spring Mvc_Marshalling_Spring Oxm - Fatal编程技术网

Java 使用XStreamMarshaller Spring生成XML视图

Java 使用XStreamMarshaller Spring生成XML视图,java,xml,spring-mvc,marshalling,spring-oxm,Java,Xml,Spring Mvc,Marshalling,Spring Oxm,我正在使用spring framework 3.1(带hibernate),并尝试生成一个XML表示,如: <user> <iduser>1</iduser> <email>bla@hello.com</email> <firstName>bob</firstName> </user> 我的servlet-conf.xml在ContentNegotiatingViewResolver中包含此视图:

我正在使用spring framework 3.1(带hibernate),并尝试生成一个XML表示,如:

<user>
<iduser>1</iduser>
<email>bla@hello.com</email>
<firstName>bob</firstName>
</user>
我的servlet-conf.xml在ContentNegotiatingViewResolver中包含此视图:

<!-- XML View -->
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
  <constructor-arg>
    <bean class="org.springframework.oxm.xstream.XStreamMarshaller">
        <property name="aliases">
        <map>
                <entry key="user123" value="com.....entities.User" />
        </map>
        </property>
    </bean>
   </constructor-arg>
</bean>

但我不明白为什么结果是一个奇怪的xml,包含数百个元素,例如:

<org.springframework.validation.BeanPropertyBindingResult>
<nestedPath/>
<nestedPathStack serialization="custom">
<unserializable-parents/>
<vector>
<default>
<capacityIncrement>0</capacityIncrement>
<elementCount>0</elementCount>
<elementData>
<null/>
<null/>
<null/>
<null/>
<null/>
<null/>
<null/>
<null/>
<null/>
<null/>
</elementData>
</default>
</vector>
</nestedPathStack>
<objectName>user</objectName>
<messageCodesResolver class="org.springframework.validation.DefaultMessageCodesResolver">
<prefix/>

0
0
用户
1-可能,马歇尔勒对反射玩得太多了,我如何才能获得我想要的预期结果?
(2-我还对生成一个包含用户列表的XML文件感兴趣)我怎么做?

正如您所指出的,现在发生的事情是,由于您没有指定需要序列化的显式模型键,它正在序列化第一个非空值模型对象,在这种情况下,它是
BindingResult
(用于在模型中保留绑定/验证错误)。您可以进行以下修复:

a、 为编组视图指定确切的
modelKey
,这将起作用并将模型设置为特定的模型键:

<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="marshaller">
...
</property>
<property name="modelKey" value="command"/>
</bean>

model.addAttribute("command", mymodel);

我在XStream中遇到了相同的错误,通过应用以下更改解决了此问题:

您可以向Marshaller bean添加“supportedClasses”属性,而不是添加modelKey:


<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="marshaller">
...
</property>
<property name="modelKey" value="command"/>
</bean>

model.addAttribute("command", mymodel);
@RequestMapping(...)
public @ResponseBody User myMethod(Model model){
    return user;
}

<mvc:annotation-driven conversion-service="conversionService"> 
   <mvc:message-converters register-defaults="false"> <!-- you may have to explicitly register other converters though-->
       <bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
           <property name="marshaller">
               <bean class="org.springframework.oxm.xstream.XStreamMarshaller"/>
           </property>
       </bean>
   </mvc:message-converters>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
    <property name="autodetectAnnotations" value="true"/>
    <property name="supportedClasses">
        <list>
            <value>com.rest.example.model.User</value>
        </list>
    </property>
</bean>
@XStreamAlias("user")
public class User {
...