当前位置:首页 > JAVA > 正文内容

java对象序列化为xml,java对象转xml

高老师1年前 (2023-10-08)JAVA569
最近在对接1个Soap接口,Java来操作是及其麻烦,想一键生成请求实体和响应实体,但是很多工具都太陈旧,无奈手工生成XML发送Http请求来实现,学习下Java序列化对象的知识,然后开始开发这个功能。
(1).定义对象:
@XmlRootElement(name = "user")
public class User {
    private String name;
    private int age;
    private String birthday;
}
注解部分声明了Xml的root节点名称
(2). 初始化对象:
// 01.构建实体
User user = new User();
user.setName("李燕茹");
user.setAge(18);
user.setBirthday("19950810");
(3).转换对象为XML
// 02.转换为Xml
try {
    // 创建JAX上下文
    JAXBContext context = JAXBContext.newInstance(User.class);

    // 创建XML序列化对象
    Marshaller marshaller = context.createMarshaller();

    // 设置输出的XML格式化增强阅读体验
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

    // 序列化XML并保存到输出流中
    StringWriter writer = new StringWriter();
    marshaller.marshal(user, writer);
    System.out.println(writer);
} catch (Exception exception) {
    System.out.println("转换Xml异常:" + exception.getMessage());
}
(4).生成xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
    <age>18</age>
    <birthday>19950810</birthday>
    <name>李燕茹</name>
</user
但是实际上webservice的xml并没有这么简单,例如追加属性值,假如我们需要在name节点增加属性值,比如这样:
<name xsi:nil="true">李燕茹</name>
看起来好简单,但是真的很麻烦。
首先我们需要将name单独抽为1个实体对象,如下:
@XmlAccessorType(XmlAccessType.FIELD)
public class Name {

    @XmlAttribute(name = "xsi:nil")
    private String xsiNil;

    @XmlValue
    private String value;
}
name节点值的变量名称不需要特殊定义,标记为@XmlValue即可。


扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/644.html

分享给朋友:

“java对象序列化为xml,java对象转xml” 的相关文章

 java字节与字符的区别,字节与字的区别与联系

java字节与字符的区别,字节与字的区别与联系

字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。字符(Character)计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&'等。一般在英文...

java编译编码问题,java编译执行时编码问题

java编译编码问题,java编译执行时编码问题

public class test {     public static void main(String[] args) {     &...

java Character 类,java判断字符是否是一个字母,java判断字符是否是一个数字,java判断字符是否是一个空白,java判断字符是否是小写字母,java判断字符是否是大写字母,java转换字符为大写,java转换字符为小写

java Character 类,java判断字符是否是一个字母,java判断字符是否是一个数字,java判断字符是否是一个空白,java判断字符是否是小写字母,java判断字符是否是大写字母,java转换字符为大写,java转换字符为小写

java判断字符是否是一个字母System.out.println(Character.isLetter('a'));java判断字符是否是一个数字System.out.println(Character.isDigit('0'));java判断字符是否是一个空白Sy...

java String 类 ,java 字符串类,java创建字符串,java获取字符串长度,java连接字符串,java格式化字符串

java String 类 ,java 字符串类,java创建字符串,java获取字符串长度,java连接字符串,java格式化字符串

在java中字符串属于对象,刚开始我就疑惑为什么int char等类型都是小写,结果String是大写,java太反人类,后来才知道String是对象。(1).java创建字符串String text = "net"; String tex...

java stringBuffer,java stringBuffer反转字符串,java stringBuffer delete删除字符/移除字符,java stringBuffer在指定位置插入字符串,java stringBuffer替换指定位置的字符串,java stringBuffer获取指定索引的值

java stringBuffer,java stringBuffer反转字符串,java stringBuffer delete删除字符/移除字符,java stringBuffer在指定位置插入字符串,java stringBuffer替换指定位置的字符串,java stringBuffer获取指定索引的值

java stringBuffer(1).stringBuffer和stringBuilder区别stringBuffer是线程安全的,stringBuilder速度更快(2).简单的stringBuffer例子StringBuffer sBuffer = new&nb...

java正则表达式捕获组

java正则表达式捕获组

java正则表达式的捕获组捕获组可以将匹配到的结果根据正则中的括号进行分组,这里变量我加了$符,php转java的坏习惯,懒得改了,能跑就行// 匹配字符串 String $line = "gaojiufeng 1994! ok?...