关于java后台如何接收xml格式的数据
业务场景:用户发送下单请求,格式为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格式的数据的更多相关文章
- 原生java读取存储为xml格式的数据,并存储到java bean里
一.举例读取的文件为:X-bond可交易债券信息_20180917.xml <?xml version="1.0" encoding="UTF-8"?&g ...
- .net webapi 接收 xml 格式数据的三种情况
webapi 接收 xml 的三种方法 前段时间接到一个任务写一个小接口,要接收java端返回过来的短信xml数据. 刚拿到项目,我的第一想法是对方会以什么形式发送xml格式的数据给我呢,设想三种情况 ...
- xml格式的数据转化成数组
将得到的xml格式的数据转化成数组 <?php //构造xml $url = "http://api.map.baidu.com/telematics/v3/weather?locat ...
- C#操作数据表中XML格式的数据
以前还真没有见过数据表中存储XML格式的数据,刚开始听说的时候,还以为是数据表中有XML的字段类型, 再了解,其实也就是字符串类型的,只不过字符串的格式是XML格式的.确实孤陋寡闻!汗... (可添加 ...
- 如何在JSP页面里面显示xml格式的数据
正常情况下,在jsp页面里的标签里写xml格式的数据,在浏览器里面的页面里显示出来的是乱码. 为什么会显示乱码呢?原来xml标签在jsp里会被解析为浏览器对象,因为xml最开始被设计出来是 为了写网页 ...
- scrapy 解析xml格式的数据
XMLFeedSpider 主要用于 解析 xml格式的数据 创建一个scrapy 项目文件 scrapy startproject xxx 创建一个spider scrapy genspider - ...
- JAVA 读取xml格式的数据
<?xml version="1.0" encoding="UTF-8"?> <column-enums> <type name= ...
- PHP接收JSON格式的数据
在API服务中,目前流行采用json形式来交互. 给前端调用的接口输出Json数据,这个比较简单,只需要组织好数据,用json_encode($array) 转化一下,前端就得到json格式的数据. ...
- SpringMVC处理XML格式的数据
1.搭建SpringMVC+spring环境 2.web.xml,Springmvc-config.xml.springMVC提供了处理xml格式请求响应的HttpMessageConverter,s ...
随机推荐
- IReferenceCounted DotNetty.Common
// Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file ...
- 开源 免费 java CMS - FreeCMS1.9 移动APP管理 栏目配置
项目地址:http://www.freeteam.cn/ 栏目配置 管理员能够在这里设设置栏目是否是否同意移动app訪问.栏目页的布局等属性. 从左側管理菜单点击栏目配置进入. 选择须要管理的栏目后点 ...
- web.xml文件中配置mime下载文件类型(转)
转自:http://5aijava.iteye.com/blog/166600 TOMCAT在默认情况下下载.rar的文件是把文件当作text打开,以至于IE打开RAR文件为乱码,如果遇到这种情况时不 ...
- zoj 2744 - Palindromes
题目:统计一个串中的回文子串的个数(注意是子串,要连续). 分析:dp.暴力.直接用dp,二维数组内存不够用,并且dp木有暴力快( ⊙ o ⊙ )啊! 说明:(2011-09-24 03:22). # ...
- EF中多表公共字段,以及设置EntityBase使所有实体类继承自定义类
使用EF框架访问数据库时,如果某些表具有公共字段,例如在审核流程中,对于各类申请单资料的创建人.创建时间.修改人.修改时间,这些可能多表都需要的字段,如果在每个实体中进行赋值操作显然是类似和重复的,下 ...
- jQuery select的操作实现代码
//改变时的事件 $("#testSelect").change(function(){ //事件发生生 jQuery('option:selected', this ...
- 使用 %matplotlib inline 出错?
%matplotlib inline 是一个魔法函数(Magic Functions).官方给出的定义是:IPython有一组预先定义好的所谓的魔法函数(Magic Functions),你可以通过命 ...
- 2B01-View-Switcher
Gallery和swithcer联合使用 /* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the ...
- 红茶一杯话Binder(传输机制篇_上)
红茶一杯话Binder (传输机制篇_上) 侯 亮 1 Binder是如何做到精确打击的? 我们先问一个问题,binder机制到底是如何从代理对象找到其对应的binder实体呢?难道它有某种制导装置吗 ...
- PILE读书笔记_进程环境
进程是操作系统运行程序的一个实例, 也是操作系统分配资源的单位. 在Linux环境中, 每个进程都有独立的进程空间, 以便对不同的进程进行隔离, 使之不会互相影响. atexit函数 #include ...