当前位置: 首页 > news >正文

JAXB:用XmlElement注解复杂类型的Java属性,来产生多层嵌套的xml元素

例如,下面这段请求的xml代码,在元素body下面又多了一层,嵌套了4个元素:

<?xml version="1.0" encoding="UTF-8"?><request><reqtype>04</reqtype><secret>test</secret><body><userid>15</userid><seeid>1001</seeid><upseeid>10</upseeid><status>1</status></body>
</request>

可以使用下面的JAXB注解来跟上面的xml映射。其中属性seeContent映射到xml的body元素,seeContent属性的类型不再是一个简单类型,而是一个Java类:

package com.thb.server.topology;import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;/*** 该类映射到http请求的xml* @author thb**/
// 使用了JAXB注解,映射到xml中的request元素
@XmlRootElement(name = "request")
public class TopologyRequest {private String reqtype;private String secret;private SeeContent seeContent;// 使用了JAXB注解,映射到xml中的reqtype元素@XmlElement(name="reqtype", required = true)public String getReqtype() {return this.reqtype;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setReqtype(String reqtype) {this.reqtype = reqtype;}// 使用了JAXB注解,映射到xml中的secret元素@XmlElement(name="secret", required = true)public String getSecret() {return this.secret;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setSecret(String secret) {this.secret = secret;}// 使用了JAXB注解,映射到xml中的body元素@XmlElement(name="body", required = true)public SeeContent getSeeContent() {return this.seeContent;}public void setSeeContent(SeeContent seeContent) {this.seeContent = seeContent;}
}

下面定义Java属性seeContent引用的类型SeeContent,这个类的属性映射到xml中body元素下面的四个元素:

package com.thb.server.topology;import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;@XmlType(propOrder = {"userid", "seeid", "upseeid", "status"})
class SeeContent{private String userid;private String seeid;private String upseeid;private String status;// 使用了JAXB注解,映射到xml中body元素下面的userid元素@XmlElement(name="userid", required = true)String getUserid() {return this.userid;}void setUserid(String userid) {this.userid = userid;}// 使用了JAXB注解,映射到xml中body元素下面的seeid元素@XmlElement(name="seeid", required = true)String getSeeid() {return this.seeid;}void setSeeid(String seeid) {this.seeid = seeid;}// 使用了JAXB注解,映射到xml中body元素下面的upseeid元素@XmlElement(name="upseeid", required = true)String getUpseeid() {return this.upseeid;}void setUpseeid(String upseeid) {this.upseeid = upseeid;}// 使用了JAXB注解,映射到xml中body元素下面的status元素@XmlElement(name="status", required = true)String getStatus() {return this.status;}void setStatus(String status) {this.status = status;}
}

生成XML schema看看:
在这里插入图片描述
生成的XML schema文件内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="request" type="topologyRequest"/><xs:complexType name="topologyRequest"><xs:sequence><xs:element name="reqtype" type="xs:string"/><xs:element name="secret" type="xs:string"/><xs:element name="body" type="seeContent"/></xs:sequence></xs:complexType><xs:complexType name="seeContent"><xs:sequence><xs:element name="userid" type="xs:string"/><xs:element name="seeid" type="xs:string"/><xs:element name="upseeid" type="xs:string"/><xs:element name="status" type="xs:string"/></xs:sequence></xs:complexType>
</xs:schema>

用Postman请求web服务,收到了正常的响应:
在这里插入图片描述

在服务端把收到的信息打印出来,成功将请求的xml内容反序列化到了java对象,内容正确:
在这里插入图片描述

http://www.lryc.cn/news/237368.html

相关文章:

  • 万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志分层
  • 工作记录---为什么双11当天不能申请退款?(有趣~)
  • ElasticSearch在Windows上的下载与安装
  • 软件测试/测试开发/人工智能丨基于Spark的分布式造数工具:加速大规模测试数据构建
  • ClickHouse的 MaterializeMySQL引擎
  • Ubuntu 22.04安装Rust编译环境并且测试
  • 制作Go程序的Docker容器(以及容器和主机的网络问题)
  • mysql清除数据痕迹_MySQL使用痕迹清理~/.mysql_history - milantgh
  • PDF控件Spire.PDF for .NET【转换】演示:自定义宽度、高度将 PDF 转 SVG
  • 01背包 P1507 NASA的食物计划
  • 平衡二叉树c语言版
  • 初始环境配置
  • 记GitLab服务器迁移后SSH访问无法生效的问题解决过程
  • 【NGINX--2】高性能负载均衡
  • Android studio run 手机或者模拟器安装失败,但是生成了debug.apk
  • 【面试经典150 | 数学】加一
  • Rust unix domain socket
  • 初识分布式键值对存储etcd
  • docker swarm集群部署
  • MySQL进阶_9.事务基础知识
  • IDEA调用接口超时,但Postman可成功调用接口
  • TableUtilCache:针对CSV表格进行的缓存
  • java源码-工程讲解
  • K8S基础笔记
  • 十一、统一网关GateWay(搭建网关、过滤器、跨越解决)
  • C语言--每日五道选择题--Day20
  • Fourier分析导论——第6章——R^d 上的Fourier变换(E.M. Stein R. Shakarchi)
  • 音视频技术在手机上的应用与挑战
  • 三十分钟学会SCALA
  • leetcode做题笔记242. 有效的字母异位词