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.mzph.cn/news/153895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电机应用开发-编码器的使用

编码器 增量式编码器倍频技术 增量式编码器输出的常见脉冲波形信号形式&#xff1a; 占空比为50%的方波&#xff0c;通道A和通道B相位差为90。 正弦波的模拟信号&#xff0c;通道A和通道B相位差为90。 对于占空比为50%的方波&#xff0c;通道A和通道B相位差为90。先以下图为例…

C++ LibCurl实现Web隐藏目录扫描

LibCurl是一个开源的免费的多协议数据传输开源库&#xff0c;该框架具备跨平台性&#xff0c;开源免费&#xff0c;并提供了包括HTTP、FTP、SMTP、POP3等协议的功能&#xff0c;使用libcurl可以方便地进行网络数据传输操作&#xff0c;如发送HTTP请求、下载文件、发送电子邮件等…

响应体和状态码

后端响应体和状态码设计 主流技术&#xff1a;响应体 和 状态码结合使用 响应体&#xff1a;数据 响应 给前端的 格式 1、为什么要设计统一响应体? 1、系统默认提供许多的状态码&#xff0c;但HTTP的状态码数量有限。 通过修改响应返回的JSON数据&#xff0c;更好的表达业务中…

【docker下安装jenkins】(一)

目的&#xff1a;在Linux操作系统&#xff08;x86_64)下&#xff0c;使用docker部署jenkins&#xff0c;python使用压缩包安装 安装jenkins的步骤 &#xff11;、编排jenkins的docker-compose.yml文件 说明&#xff1a;这里遇到部署jenkins后&#xff0c;占用内存8G,所以重新…

scala解析命令行参数详解

如何用scala解析命令行参数&#xff1a; 首先&#xff0c;需要在项目中添加Apache Commons CLI库的依赖。可以在pom.xml中加&#xff0c; 也可以在build.sbt文件中添加如下行&#xff1a; libraryDependencies "commons-cli" % "commons-cli" % "…

HarmonyOS第一课-对比Kotlin,快速入门TypeScript

编程语言简介 基础类型 1. 布尔值 TypeScript 和 Kotlin: 两者都有 boolean 类型&#xff0c;用于表示 true 或 false。 ts示例&#xff1a; let isDone:boolean falsekotlin示例&#xff1a; val isDone: Boolean false2. 数字 TypeScript: 有 number 类型&#xff0c…

hadoop 配置历史服务器 开启历史服务器查看 hadoop (十)

1. 配置了三台服务器&#xff0c;hadoop22, hadoop23, hadoop24 2. hadoop文件路径: /opt/module/hadoop-3.3.4 3. hadoop22机器配置历史服务器的配置文件&#xff1a; 文件路径&#xff1a;/opt/module/hadoop-3.3.4/etc/hadoop 文件名称&#xff1a;mapred-size.xml 新增历…

帮我想几个关于实人认证API的中文文章标题

引言 随着信息时代的迅速发展&#xff0c;数据变得愈加庞大和复杂。在这个大数据的时代&#xff0c;企业面临着海量信息的管理和利用挑战。为了更有效地获取并利用数据&#xff0c;企业信息模糊搜索API成为了企业数据智能引擎的一部分&#xff0c;为企业提供了精准的企业列表检…

RK3588产测软件介绍

1. 简介 本公司研发的产测软件是用于在量产的过程中快速地甄别产品功能和器件的好坏&#xff0c;即重点 FCT&#xff08;Functional Test&#xff09;测试&#xff0c;进而提高生产效率和检测的准确性。 2. 产测软件介绍 QT开发的ARM平台产测图形化软件&#xff0c;一键开启傻…

【问题处理】WPS提示不能启动此对象的源应用程序如何处理?

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 最近在用WPS打开word文件中&#xff0c;插入的Excel附件时&#xff0c;无法打开&#xff0c;提示&#xff1a;“不能启动此对象的源应用程序”。 经过上网查找处理办法&#xff0c;尝试解决&#xff0c;现将解决过程记…

前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 系列文章目录

系列文章目录 第一章 技术栈简介 (开篇) 第二章 环境部署 (Node等环境安装) 第三章 项目创建 (Vite项目初始化) 第四章 认识项目目录 第五章 Element-Plus组件库安装和使用 第六章 样式格式化 (Sass) 第七章 路由配置 (vue-router路由守卫) 第八章 请求配置 (Axios请求和响应拦…

大模型LLM 在线量化;GPTQ\AWQ量化及推理

1、大模型LLM 在线量化 参考:https://www.cnblogs.com/bruceleely/p/17348782.html ##8bit model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(8).half(

HDR相关文章收集

一文分清HDR10/HDR10/Dolby Vision 什么是4K HDR&#xff1f;HDR10、HDR10 PRO、杜比视界HDR区别 HDR中显示器标准和视频编码标准 芯片支持HDR解码 HDR详解 HDR技术趋势浅析 BT.2100 HDR 基本规范 图形图像基础知识&#xff08;5&#xff09;---- HDR 基本概念

Linux socket编程(4):服务端fork之僵尸进程的处理

在上一节利用fork实现服务端与多个客户端建立连接中&#xff0c;我们使用fork函数来实现服务端既可以accept新的客户端连接请求&#xff0c;又可以接收已连接上的客户端发来的消息。但在Linux中&#xff0c;在子进程终止后&#xff0c;父进程需要处理该子进程的终止状态&#x…

ChatGLM3-6B安装

1 CentOS7 安装Python 10 1.1 安装基础环境 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel1.2 升级 OpenSSL 不升级 OpenSSL&#xff0c;pip instal…

【开源】基于Vue.js的车险自助理赔系统的设计和实现

项目编号&#xff1a; S 018 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S018&#xff0c;文末获取源码。} 项目编号&#xff1a;S018&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车…

[GFCTF 2021]wordy 编写去花IDAPYTHON

首先查壳 发现没有东西 然后放入ida 发现没有main并且软件混乱 发现这里1144的地方 出错 IDA无法识别数据 报错内容是EBFF 机器码 这里看了wp知道是很常见的花指令 所以我们现在开始去花 这里因为我们需要取出 EBFF 下面的地址也都是 EBFF 所以工作量大 使用IDApython脚本即…

EasyRecovery2024最新永久破解版本安装包下载

当我们处理重要的文件数据时&#xff0c;遇到突然停电导致数据来不及保存&#xff0c;再次打开电脑后&#xff0c;此前处理的数据可能丢失&#xff0c;这无疑会影响我们的工作进度&#xff0c;数据恢复软件在此时就派上用场&#xff0c;那么下面就来具体介绍EasyRecovery软件的…

FL Studio21怎么破解?2024年最新FLStudio21.2.0安装解锁特别版下载使用图文教程

用FL Studio编曲&#xff0c;让音乐成为你的翅膀&#xff0c;飞翔在无尽的创作海洋中吧&#xff01; FL Studio作为一款功能强大且备受赞誉的音乐制作软件&#xff0c;为你提供了一个独特的创作平台。通过FL Studio&#xff0c;你可以自由地创作、编曲&#xff0c;制作属于自己…

4.6 Windows驱动开发:内核遍历进程VAD结构体

在上一篇文章《内核中实现Dump进程转储》中我们实现了ARK工具的转存功能&#xff0c;本篇文章继续以内存为出发点介绍VAD结构&#xff0c;该结构的全程是Virtual Address Descriptor即虚拟地址描述符&#xff0c;VAD是一个AVL自平衡二叉树&#xff0c;树的每一个节点代表一段虚…