码迷,mamicode.com
首页 > 编程语言 > 详细

关于java后台如何接收xml格式的数据

时间:2017-08-14 11:29:45      阅读:455      评论:0      收藏:0      [点我收藏+]

标签:type   sso   email   返回结果   element   pre   string   use   请求   

业务场景:用户发送下单请求,格式为xml格式,服务器接收数据完成下单,并返回结果给客户。

 请求格式:

<request>
   <head>
     <sign></sign>
     <time></time>
     <msg></msg>
  </head>
  <body>
    <productId></productId>
    <count></count>
    <price></price>
    <user>
       <userId></userId>
       <name></name>
       <mobil></mobil>
       <email></email>
    </user>
    <extendInfos>
       <extendInfo>
          <city></city>
          <province></province>
          <district></district>
          <address></address>
       </extendInfo>
    </extendInfos>
  </body>
</request>

这段请求报文是xml格式的,在后台我们可以使用 javax.xml.bind.annotation 这个包格式化数据。

我们可以在做数据对应的dto是用@XmlElement注释标注对应节点

比如:

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import com.juqitech.adapter.dto.ChannelDTO;

@XmlRootElement(name = "request")
@XmlAccessorType(XmlAccessType.NONE)
public class RequestDTO implements Serializable {

    private static final long serialVersionUID = -1;

    @XmlElement
    private RequestHeaderDTO head;
    
    @XmlElement
    private RequestBodyDTO body;

    public RequestHeaderDTO getHead() {
        return head;
    }

    public void setHead(RequestHeaderDTO head) {
        this.head = head;
    }

    public RequestBodyDTO getBody() {
        return body;
    }

    public void setBody(RequestBodyDTO body) {
        this.body = body;
    }

}
@XmlRootElement(name = "request")可以定义在类上,代表根节点
@XmlAccessorType(XmlAccessType.FIELD)
表示使用这个类中的 private 非静态字段作为 XML 的序列化的属性或者元素。这里还可以选择属性,也就是使用 set/get 方法来序列化属性或者元素。

关键在于在请求中有个extendInfos的array数组,一般我们都会用list来表示,所以在RequestBodyDTO中可以这么写:

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import com.juqitech.adapter.dto.ChannelDTO;

@XmlRootElement(name = "body")
@XmlAccessorType(XmlAccessType.NONE)
public class RequestBodyDTO implements Serializable {

    private static final long serialVersionUID = -1;

    //....前面的属性省略


    @XmlElementWrapper(name="extendInfos") 
    @XmlElement(name="extendInfo") 
    private List<extendInfo> extendInfos;
    
     //。。其他的省略

}
@XmlRootElement(name
= "extendInfo") @XmlAccessorType(XmlAccessType.NONE) public class extendInfo{ @XmlElement private String city; @XmlElement private String province; @XmlElement private String district; //省略 }
@XmlElementWrapper 这个注释用来在外面在包一层,用于处理list集合
 

关于java后台如何接收xml格式的数据

标签:type   sso   email   返回结果   element   pre   string   use   请求   

原文地址:http://www.cnblogs.com/wangzun/p/7356463.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!