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

XmlElement注解在Java的数组属性上,以产生多个相同的XML元素

例如,下面这段XML数据,有多个data元素,并且它们级别相同:

<?xml version="1.0" encoding="UTF-8"?><request><reqtype>05</reqtype><secret>test</secret><body><userid>15</userid><seeid>1001</seeid><time>202311201510</time><data><type>01</type><value>219</value></data><data><type>02</type><value>217</value></data></body>
</request>

要用JAXB注解将Java类映射到上面的XML,示例如下:

映射xml request元素、及下面一级子元素的Java类:

package com.thb.server.fulldata;import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlType;/*** 该类映射到http请求的xml* @author thb**/
// 使用了JAXB注解,映射到xml中的request元素
@XmlRootElement(name = "request")
@XmlType(propOrder = {"reqtype", "secret", "fullDataContent"})
public class FullDataRequest {private String reqtype;private String secret;private FullDataContent fullDataContent;// 使用了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 FullDataContent getFullDataContent() {return this.fullDataContent;}public void setFullDataContent(FullDataContent fullDataContent) {this.fullDataContent = fullDataContent;}
}

映射xml body子元素、及下面一级子元素的Java类:

package com.thb.server.fulldata;import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;@XmlType(propOrder = {"userid", "seeid", "time", "items"})
class FullDataContent {private String userid;private String seeid;private String time;private Item[] items;// 使用了JAXB注解,映射到xml中body元素下面的userid元素@XmlElement(name="userid", required = true)public String getUserid() {return this.userid;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setUserid(String userid) {this.userid = userid;}// 使用了JAXB注解,映射到xml中body元素下面的seeid元素@XmlElement(name="seeid", required = true)public String getSeeid() {return this.seeid;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setSeeid(String seeid) {this.seeid = seeid;}// 使用了JAXB注解,映射到xml中body元素下面的time元素@XmlElement(name="time", required = true)public String getTime() {return this.time;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setTime(String time) {this.time = time;}// 使用了JAXB注解,映射到xml中body元素下面的data元素@XmlElement(name="data", required = true)public Item[] getItems() {return this.items;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setItems(Item[] items) {this.items = items;}
}

映射到xml data子元素、及下面一级子元素的Java类:

package com.thb.server.fulldata;import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;@XmlType(propOrder = {"type", "value"})
public class Item {private String type;private String value;// 使用了JAXB注解,映射到xml中body元素下面-》data子元素下面-》type子元素@XmlElement(name="type", required = true)public String getType() {return this.type;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setType(String type) {this.type = type;}// 使用了JAXB注解,映射到xml中body元素下面-》data子元素下面-》value子元素@XmlElement(name="value", required = true)public String getValue() {return this.value;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setValue(String value) {this.value = value;}
}

下面来生成Java类的xml schema文件,运行

schemagen -d D:\temp\outschema -cp D:\temp\eclipse-workspace\java_work\power-restful-webservice-server\src\main\java D:\temp\eclipse-workspace\java_work\power-restful-webservice-server\src\main\java\com\thb\server\fulldata\FullDataRequest.java

在这里插入图片描述

生成的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="fullDataRequest"/><xs:complexType name="fullDataRequest"><xs:sequence><xs:element name="reqtype" type="xs:string"/><xs:element name="secret" type="xs:string"/><xs:element name="body" type="fullDataContent"/></xs:sequence></xs:complexType><xs:complexType name="fullDataContent"><xs:sequence><xs:element name="userid" type="xs:string"/><xs:element name="seeid" type="xs:string"/><xs:element name="time" type="xs:string"/><xs:element name="data" type="item" maxOccurs="unbounded"/></xs:sequence></xs:complexType><xs:complexType name="item"><xs:sequence><xs:element name="type" type="xs:string"/><xs:element name="value" type="xs:string"/></xs:sequence></xs:complexType>
</xs:schema>

将web服务部署到Tomcat,用Postman访问,成功返回了响应:
在这里插入图片描述

在服务端正确打印了映射到Java对象中的信息:
在这里插入图片描述

相关文章:

XmlElement注解在Java的数组属性上,以产生多个相同的XML元素

例如&#xff0c;下面这段XML数据&#xff0c;有多个data元素&#xff0c;并且它们级别相同: <?xml version"1.0" encoding"UTF-8"?><request><reqtype>05</reqtype><secret>test</secret><body><userid&…...

SQLServer 数字加千分位 用FORMAT函数强转不管多大位数

问题 CONVERT ( money, CONVERT ( money, CAST ( round( FTP_AMOUNT, 2 ) AS NUMERIC ( 20, 2 ) ) ) 1 ) AS FTP_AMOUNT用的money函数 结果空间不足&#xff0c;无法将 money 值转换为 varchar。 可以强转 select FORMAT(CAST ( round( ‘-8926143870680.62000000’, 2 ) AS N…...

说说mvc和mvvm的区别和联系

mvvm 与mvc mvvm 与mvcmvc和mvvm的区别和联系 举例说明mvvm与mvc MVC是一种用于构建应用程序的架构模式&#xff0c;它也将应用程序的逻辑和界面分离。它由三个主要组件组成&#xff1a; 模型&#xff08;Model&#xff09;&#xff1a;表示应用程序的数据和业务逻辑。视图&a…...

linux rsyslog综合实战2

本次我们通过rsyslog服务将A节点服务器上的两个(E.g:多个日志也可以)日志(Path:/var/log/245-1.log、245-2.log)实时同步到B节点服务器目录下(Path:/opt/rsyslog/245) 1.rsyslog架构 2.环境信息 环境信息 HostnameIpAddressOS versionModuleNotersyslog1192.168.10.245CentOS…...

AcWing 4. 多重背包问题 I 学习笔记

有 N&#xfffd; 种物品和一个容量是 V&#xfffd; 的背包。 第 i&#xfffd; 种物品最多有 si&#xfffd;&#xfffd; 件&#xff0c;每件体积是 vi&#xfffd;&#xfffd;&#xff0c;价值是 wi&#xfffd;&#xfffd;。 求解将哪些物品装入背包&#xff0c;可使物…...

解决selenium使用chrome下载文件(如pdf)时,反而打开浏览器的预览界面

文章目录 解决方法完整的配置 解决方法 在初始化浏览器的时候&#xff0c;添加以下配置即可&#xff1a; option webdriver.ChromeOptions()prefs {"profile.managed_default_content_settings.images": 2, # 禁止加载图片# permissions.default.stylesheet: 2, …...

2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-C

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C 一、竞赛时间 总计&#xff1a;360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A、B模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略设置 A-3 流量完整性保护 A-4 …...

基于Python实现用于实时监控和分析 MySQL 服务器的性能指标和相关信息工具源码

MySQL命令行监控工具 - mysqlstat 介绍 mysqlstat 是一个命令行工具&#xff0c;用于实时监控和分析 MySQL 服务器的性能指标和相关信息。 它可以帮助 DBA&#xff08;数据库管理员&#xff09;和开发人员定位和解决数据库性能问题。 以下是 mysqlstat 工具的主要功能&#…...

Android 10-13鼠标右键返回功能适配

Android 10-13鼠标右键返回功能适配 文章目录 Android 10-13鼠标右键返回功能适配一、前言二、鼠标右键适配修改1、Android 10 以及更低版本2、Android11 或者更高版本三、总结1、鼠标右键返回功能修改主要代码2、标右键返回修改代码系统源码搜索3、其他 一、前言 Android 原生…...

51单片机/STM32F103/STM32F407学习1_点亮LED灯

目录&#xff1a; 基础知识单片机从0实现单片机GPIO介绍 参考连接&#xff1a; 野火霸天虎教程 https://doc.embedfire.com/products/link/zh/latest/mcu/stm32/ebf_stm32f407_batianhu_v1_v2/download/stm32f407_batianhu_v1_v2.html x.1 基础知识 x.1.1 指针中的取地址&a…...

(Transfer Learning)迁移学习在IMDB上训练情感分析模型

1. 背景 有些场景下&#xff0c;开始的时候数据量很小&#xff0c;如果我们用一个几千条数据训练一个全新的深度机器学习的文本分类模型&#xff0c;效果不会很好。这个时候你有两种选择&#xff0c;1.用传统的机器学习训练&#xff0c;2.利用迁移学习在一个预训练的模型上训练…...

蓝桥杯每日一题2023.11.20

题目描述 “蓝桥杯”练习系统 (lanqiao.cn) 题目分析 方法一&#xff1a;暴力枚举&#xff0c;如果说数字不在正确的位置上也就意味着这个数必须要改变&#xff0c;进行改变记录即可 #include<bits/stdc.h> using namespace std; const int N 2e5 10; int n, a[N], …...

【迅搜02】究竟什么是搜索引擎?正式介绍XunSearch

究竟什么是搜索引擎&#xff1f;正式介绍XunSearch 啥&#xff1f;还要单独讲一下啥是搜索引擎&#xff1f;不就是百度、Google嘛&#xff0c;这玩意天天用&#xff0c;还轮的到你来说&#xff1f; 额&#xff0c;好吧&#xff0c;虽然大家天天都在用&#xff0c;但是我发现&am…...

【Sql】sql server还原数据库的时候,提示:因为数据库正在使用,所以无法获得对数据库的独占访问权。

【问题描述】 sql server 还数据库的时候&#xff0c;提示失败。 点击左下角进度位置&#xff0c;可以得到详细信息&#xff1a; 因为数据库正在使用&#xff0c;所以无法获得对数据库的独占访问权。 【解决方法】 针对数据库先后执行下述语句&#xff0c;获得独占访问权后&a…...

【Go语言实战】(26) 分布式搜索引擎

Tangseng 基于Go语言的搜索引擎 github地址&#xff1a;https://github.com/CocaineCong/tangseng 详细介绍地址&#xff1a;https://cocainecong.github.io/tangseng 这两周我也抽空录成视频发到B站的&#xff5e; 本来应该10月份就要发了&#xff0c;结果一鸽就鸽到现在hh…...

【理解ARM架构】不同方式点灯 | ARM架构简介 | 常见汇编指令 | C与汇编

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《理解ARM架构》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f3c0;直接操作寄存器点亮LED灯&#x1f3c0;地址空间&#x1f3c0;ARM内部的寄存…...

JS服务端技术—Node.js知识点锦集

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/134544523 出自【进步*于辰的博客】 接触Node.js挺长时间了&#xff0c;工作也经常使用&#xf…...

界面控件DevExpress WPF流程图组件,完美复制Visio UI!(一)

DevExpress WPF Diagram&#xff08;流程图&#xff09;控件帮助用户完美复制Microsoft Visio UI&#xff0c;并将信息丰富且组织良好的图表、流程图和组织图轻松合并到您的下一个WPF项目中。 P.S&#xff1a;DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至…...

为什么选择B+树作为数据库索引结构?

背景 首先&#xff0c;来谈谈B树。为什么要使用B树&#xff1f;我们需要明白以下两个事实&#xff1a; 【事实1】 不同容量的存储器&#xff0c;访问速度差异悬殊。以磁盘和内存为例&#xff0c;访问磁盘的时间大概是ms级的&#xff0c;访问内存的时间大概是ns级的。有个形象…...

什么是神经网络(Neural Network,NN)

1 定义 神经网络是一种模拟人类大脑工作方式的计算模型&#xff0c;它是深度学习和机器学习领域的基础。神经网络由大量的节点&#xff08;或称为“神经元”&#xff09;组成&#xff0c;这些节点在网络中相互连接&#xff0c;可以处理复杂的数据输入&#xff0c;执行各种任务…...

DeerFlow:字节跳动开源的 Super Agent 框架,从入门到上手完全指南

官网 https://deerflow.tech/ 架构演示 目录 引言 一、DeerFlow 到底是什么&#xff1f; 二、为什么 DeerFlow 值得关注&#xff1f; 2.1 字节跳动的工程底蕴 2.2 真正隔离执行——Docker 沙箱是安全护城河 2.3 V2 彻底重写&#xff1a;团队追求"做对"而非&quo…...

用Python+ddddocr+Selenium搞定极验滑块验证码(附完整代码和避坑点)

PythonddddocrSelenium实战&#xff1a;极验滑块验证码自动化解决方案 当你在电商平台抢购限量商品时&#xff0c;或者在社交平台批量注册账号时&#xff0c;滑块验证码往往是第一个需要跨越的技术障碍。作为目前最主流的验证方式之一&#xff0c;极验滑块验证码通过动态加载、…...

栈数据结构详解:从入门到实战

一、栈是什么栈是后进先出 LIFO 的线性数据结构。只允许在一端进出&#xff08;栈顶&#xff09;另一端封闭&#xff08;栈底&#xff09;先进去的后出来&#xff0c;后进去的先出来生活例子&#xff1a;叠盘子、快递纸箱堆叠。二、栈核心操作固定五个基础操作&#xff1a;入栈…...

AI智能体记忆系统:从向量检索到图记忆的演进与实践指南

1. 项目概述&#xff1a;为什么我们需要一个“智能体记忆”资源库&#xff1f;如果你在过去两年里深度参与过AI智能体&#xff08;AI Agent&#xff09;的开发&#xff0c;或者仅仅是关注这个领域&#xff0c;你一定会对“记忆”这个词感到既熟悉又困惑。熟悉&#xff0c;是因为…...

LangChian实现最小可运行的 RAG示例解析

下面代码是一个可用的 LangChain 阿里云通义千问 RAG 最小示例。其逻辑非常清晰&#xff0c;就是&#xff1a;加载 → 切分 → 向量化 → 检索 → QA。 https://item.jd.com/15261772.html # -*- coding: utf-8 -*- """ Created on Thu Jul 24 21:03:45 2025…...

EkyBot连接器:构建RPA与外部系统集成的中心化桥梁

1. 项目概述与核心价值 最近在折腾一些自动化流程&#xff0c;特别是想把不同平台的数据和操作打通&#xff0c;发现一个叫 regiomag/ekybot-connector 的项目挺有意思。简单来说&#xff0c;这是一个连接器&#xff0c;或者叫“桥梁”&#xff0c;专门用来把 EkyBot 这个自动…...

从零开始使用Taotoken在十分钟内完成第一个AI应用调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 从零开始使用Taotoken在十分钟内完成第一个AI应用调用 1. 注册与初始准备 打开浏览器&#xff0c;访问Taotoken官方网站。注册流程…...

ComfyUI-Florence2完整指南:5分钟解锁微软视觉语言模型的终极力量

ComfyUI-Florence2完整指南&#xff1a;5分钟解锁微软视觉语言模型的终极力量 【免费下载链接】ComfyUI-Florence2 Inference Microsoft Florence2 VLM 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Florence2 如果你正在寻找一款能够一站式解决所有视觉AI任务…...

终极跨平台硬件调优指南:Universal x86 Tuning Utility如何释放你的Intel/AMD设备全部潜力

终极跨平台硬件调优指南&#xff1a;Universal x86 Tuning Utility如何释放你的Intel/AMD设备全部潜力 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x…...

AI智能体结构化工作空间模板:用文件系统解决记忆与角色漂移难题

1. 项目概述&#xff1a;一个为AI智能体设计的结构化工作空间模板 如果你正在尝试构建一个多智能体系统&#xff0c;或者哪怕只是一个需要长期记忆和稳定身份的单一AI助手&#xff0c;你很可能已经遇到了一个核心难题&#xff1a; 如何让AI在多次会话中保持连贯的“人格”和“…...