java程序中使用xstream方法将实体类转成xml,实体类中有null值,生成的xml就去除了含有null值的节点!
请大神帮帮忙!
更新时间:2019-10-21 13:20
最满意答案
XStream 用法详解 java 类与 XML 互换
现在 WEB数据交换的时代,传送XML目前是一个比较流行的方式,具有统一的规则约束,为实现后台接口提供了一个很方便的实现。
我编写了一个 接收XML并转换成所需要的Object类的 小例子,希望能够对做互联网数据传输、接口调用的朋友有所帮助。
首先要导入jar包xstream-1.4.3-sources.jar 和 xmlpull-1.1.3.1.jar 两个包;
其次是预备一个 XML 事例
[html] view plain copy
1.10
其次 就是 按照 XML节点的顺序 从外 到内 编写 java PO类,此实例的目的是将上面的XML转换为 AllnewstateRQ 这个实体类,然后从里面打印出测试数据。
下面依次是 config节点 对应的 AllnewstateRQ类 ; client 节点 对应的 Client 类;sign 节点对应的 Sign类;vientiance 节点 对应的 Vientiance类。
[java] view plain copy
package com.wgq.test09_xml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("config")
public class AllnewstateRQ {
//当节点下有独立属性的时候,需要创建一个独立的类用来保存节点内的属性
private Client client = new Client();
private Sign sign = new Sign();
private Vientiance vientiance = new Vientiance();
//当节点下没有属性,直接由StringValue的时候可直接创建String类型属性
private String protocol;
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public Sign getSign() {
return sign;
}
public void setSign(Sign sign) {
this.sign = sign;
}
public Vientiance getVientiance() {
return vientiance;
}
public void setVientiance(Vientiance vientiance) {
this.vientiance = vientiance;
}
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
this.protocol = protocol;
}
}
[java] view plain copy
package com.wgq.test09_xml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias("client")
public class Client {
@XStreamAsAttribute //对属性值进行注解
private String type;//此时类中的属性名要和xml内的属性名相对应
@XStreamAsAttribute
private String osversion;
@XStreamAsAttribute
private String version;
@XStreamAsAttribute
private String oemtag;
@XStreamAsAttribute
private String area;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getOsversion() {
return osversion;
}
public void setOsversion(String osversion) {
this.osversion = osversion;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getOemtag() {
return oemtag;
}
public void setOemtag(String oemtag) {
this.oemtag = oemtag;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
}
[java] view plain copy
package com.wgq.test09_xml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias("sign") //此处要对应节点的名称
public class Sign {
@XStreamAsAttribute
private String value;//此处对应节点内属性名称
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
[java] view plain copy
package com.wgq.test09_xml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias("vientiance")
public class Vientiance {
@XStreamAsAttribute
private String version;
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
测试main方法
[java] view plain copy
package com.wgq.test09_xml;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class TestStream {
public static void main(String[] args) {
String reqXml = getXml();
XStream xs = new XStream(new DomDriver());
xs.processAnnotations(new Class[]{AllnewstateRQ.class,Client.class,Sign.class,Vientiance.class});
Object obj = xs.fromXML(reqXml);
AllnewstateRQ allnewstateRQ = (AllnewstateRQ) obj;
System.out.println(allnewstateRQ.getProtocol());
System.out.println(allnewstateRQ.getClient().getArea());
System.out.println(reqXml);
}
static String getXml(){
StringBuilder str = new StringBuilder();
str.append("")
.append("
")
.append("
")
.append("
1.10")
.append("
")
.append("
")
.append("")
;
return str.toString();
}
}
输出结果:
[java] view plain copy
1.10
areacode
1.10
2016-07-21 回答
其他回答
用反射做吧。
public static
t xmltobean(string reponse,t object) throws exception {
document document = xmltodoc(reponse);
element root = document.getdocumentelement();
method[] thismethodgroup = object.getclass().getmethods();
for (method method : thismethodgroup) {
if (method.getname().startswith("set")&& !method.getname().equals("getclass")) {
string name=method.getname().substring(3, method.getname().length()).tolowercase();
if(root.getelementsbytagname(name).item(0)==null){continue;}
string value=root.getelementsbytagname(name).item(0).gettextcontent();
if(value!=null){method.invoke(object, new object[]{value});}
}
}
return object;
}
给我加点分吧。。。
2016-07-21 回答
相关问答
AutoJava 是一款免费的,针对于Oracle和SQLserver数据库的、以面向对象模式的Java代码生成工具。AutoJava根据O/R Mapping规则生成表对应的Java对象,并且生成了所有的添加、删除、修改、查询等底层数据库操作代码。借助于AutoJava我们基本上不用再写与数据库相关的操作代码,只需要在此基础上实现相关的业务逻辑,将我们从重复的无太大技术含量的工作中解放出来。 AutoJava 是我在工作中为了省时间而写出来的一个小工具,希望AutoJava能给广大的Java人员
...
@value是需要spring注解扫描的,要将spring注解扫描配置中加上实体类的包名路径,实体类也有注解扫描配置的,两者不一样
首先:你最好把你的实体类里面的变量名称和你的表里面字段写成一致。 然后:在SqlMapConfig.xml中 这就是把你的实体类写了个别名 最后:在你写查询添加的时候: 返回你的实体类对象 select * from tb_game 这样查出的结果就对应上你的数据了。
The error occurred while setting parameters!! 设置参数的时候出了问题啊~
XStream 用法详解 java 类与 XML 互换 现在 WEB数据交换的时代,传送XML目前是一个比较流行的方式,具有统一的规则约束,为实现后台接口提供了一个很方便的实现。 我编写了一个 接收XML并转换成所需要的Object类的 小例子,希望能够对做互联网数据传输、接口调用的朋友有所帮助。 首先要导入jar包xstream-1.4.3-sources.jar 和 xmlpull-1.1.3.1.jar 两个包; 其次是预备一个 XML 事例 [html] view pl
...
一、用CodeSmith自带模版生成实体类 选中模版(businessobject.cst),右键执行(Execute),然后选择保存目录、数据库、表,最后生成(Generate)。 1、新建一个C#模版,导包 //声明SourceTable
...
在Java SE环境中,可移植应用程序必须在persistence.xml显式列出类。 从JPA 1.0规范: 6.2.1.6 mapping-file,jar-file,class,exclude-unlisted-classes 必须将以下类隐式或显式地表示为要包含在持久性单元中的托管持久性类:实体类; 可嵌入的课程; 映射的超类。 由持久性单元管理的托管持久性类集通过使用以下一个或多个来定义: 一个或多个对象/关系映射XML文件 将搜索类的一个或多个jar文件 明确的类列表 包含在持久性单元
...
这是你要找的东西吗? http://www.wikihow.com/Generate-Hibernate-Pojo-Classes-from-DB-Tables Is this something you are looking for? http://www.wikihow.com/Generate-Hibernate-Pojo-Classes-from-DB-Tables