Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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
Xml Spring MVC REST中对象的映射_Xml_Spring_Rest_Spring Mvc - Fatal编程技术网

Xml Spring MVC REST中对象的映射

Xml Spring MVC REST中对象的映射,xml,spring,rest,spring-mvc,Xml,Spring,Rest,Spring Mvc,因此,我对SpringMVC还相当陌生,一直在构建一个应用程序,它承载+使用了多个API,大部分都工作正常,但我现在遇到了麻烦 由于某些原因,xml中的属性不会映射到对象中。我对JSON没有这个问题,但不幸的是,在这种情况下,我处于接收端,无法更改请求的格式。 请求有效负载类似于: <xml> <ToUserName> <![CDATA[toUser]]> </ToUserName> <FromUserName> <![CDA

因此,我对SpringMVC还相当陌生,一直在构建一个应用程序,它承载+使用了多个API,大部分都工作正常,但我现在遇到了麻烦

由于某些原因,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>1234567890123456</MsgId>
</xml>
看起来应该有用,对吧? 好吧,输出是这样的

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}
如您所见,所有属性都为null,即使是有效负载中提供的属性

我假设这可能与有效载荷的结构有关,但正如我所说的,我无法改变这一点

非常感谢您的帮助,谢谢

编辑:修复了标题中的打字错误。。。 编辑2:进一步的信息。。。servlet配置的相关部分:

<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> 

Jaxb2RootElementHttpMessageConverter
用于将Java对象转换成XML或从XML转换成Java对象。如果满足以下条件,则消息转换工作:

  • 如果类路径上存在JAXB2,则此转换器是预启用的
  • java类应该有xml到java绑定的详细信息
例如:

@XmlRootElement
public class Customer {
    String name;
    int id;

    public String getName() {
        return name;
    }

    @XmlElement
    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    @XmlAttribute
    public void setId(int id) {
        this.id = id;
    }
}

因为您希望将XML转换为java对象,反之亦然,所以需要使用JAXB进行编组和解编组。spring中有现成的消息转换器,如Jaxb2RootElementHttpMessageConverter,可能会有所帮助。请共享
ReceivedMessage
类的内容。@Mithun类已添加,目前正在查看Jaxb2RootElementHttpMessageConverterwas在添加(name=“xml”)之前引发未知元素异常对于XmlRootElement注释,现在可以了,但结果与开始时相同,全部为null不确定这是否是问题所在。请您重新命名这些标记,使其与java类中的变量名相同。由于我不能更改xml输入(它来自第三方API),我决定删除getter/setter,公开变量,并将它们重命名为大写字母开头。这很有效。它并不理想,因为它打破了封装和命名约定,但鉴于这种情况,它似乎是必要的。谢谢你的帮助
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() {
    }
}
@XmlRootElement
public class Customer {
    String name;
    int id;

    public String getName() {
        return name;
    }

    @XmlElement
    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    @XmlAttribute
    public void setId(int id) {
        this.id = id;
    }
}