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对象中的信息:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/170607.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】【版本2.0】【树形深渊】——二叉树入侵

目录 引言 一、树的概念与结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用 二、二叉树的概念与结构 2.1 二叉树的概念 2.2 特殊二叉树 满二叉树 完全二叉树 2.3 现实中的二叉树 2.4 二叉树的性质 2.5 二叉树的存储结构 顺序存储 链式…

掌握源码,轻松搭建:一站式建站系统源码 附完整搭建步骤与教程

随着互联网的快速发展&#xff0c;网站已成为人们生活中不可或缺的一部分。然而&#xff0c;对于许多初学者或中小企业来说&#xff0c;搭建一个完整的网站系统并非易事。这涉及到前端和后端的开发、数据库管理等多个环节。为了解决这一痛点&#xff0c;我们推出了一站式建站系…

Redis变慢怎么办?

一、Redis为什么变慢了 1.Redis 真的变慢了吗&#xff1f; 对 Redis 进行基准性能测试 例如&#xff0c;我的机器配置比较低&#xff0c;当延迟为 2ms 时&#xff0c;我就认为 Redis 变慢了&#xff0c;但是如果你的硬件配置比较高&#xff0c;那么在你的运行环境下&#xf…

synchronized锁膨胀过程

轻量级锁&#xff1a; 使用场景&#xff1a;如果一个对象虽然有多线程要加锁&#xff0c;但加锁的时间是错开的&#xff08;也就是没有竞争&#xff09;&#xff0c;那么可以 使用轻量级锁来优化。 轻量级锁原理 1.创建锁记录&#xff08;Lock Record&#xff09;对象&#…

【前端学java】java中的字符串操作(10)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…

抖音电商双11官方数据最全汇总!

11月13日&#xff0c;抖音电商数据发布“抖音商城双11好物节”数据报告&#xff0c;展现双11期间平台全域经营情况及大众消费趋势。 报告显示&#xff0c;10月20日至11月11日&#xff0c;抖音电商里的直播间累计直播时长达到5827万小时&#xff0c;挂购物车的短视频播放了1697亿…

PEFT LoraConfig参数详解

参数高效微调 (PEFT) 可以使预训练模型高效适应下游应用&#xff0c;而无需微调所有模型参数。 PEFT 支持广泛使用的大型语言模型低秩适应 (LoRA)。 为了从预训练的 Transformer 模型创建 LoRA 模型&#xff0c;我们导入并设置 LoraConfig。 例如&#xff0c; from peft impo…

数据预处理pandas pd.json_normalize占用内存过大优化

问题描述 从ES下载数据&#xff0c;数据格式为json&#xff0c;然后由pandas进行解析&#xff0c;json中的嵌套字段会进行展开作为列名(由于维度初期无法预测&#xff0c;所以根据数据有啥列就使用啥列&#xff0c;这是最方便的点)&#xff0c;变成表格&#xff0c;方面了后续…

Proxmox download

Proxmox VE proxmox Virtual Environment是一个基于 QEMU/KVM 和 LXC 的开源服务器虚拟化管理解决方案。您可以使用集成的、易于使用的 Web 界面或通过 CLI 管理虚拟机、容器、高可用性集群、存储和网络。Proxmox VE 代码根据 GNU Affero 通用公共许可证第 3 版获得许可 Prox…

Vue typescript项目配置eslint+prettier

1.安装依赖 安装 eslint yarn add eslint --dev安装 eslint-plugin-vue yarn add eslint-plugin-vue --dev主要用于检查 Vue 文件语法 安装 prettier 及相关插件 yarn add prettier eslint-config-prettier eslint-plugin-prettier --dev安装 typescript 解析器、规则补充 …

Redis篇---第十一篇

系列文章目录 文章目录 系列文章目录前言一、说说Redis持久化机制二、缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题三、热点数据和冷数据是什么前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

gzip 压缩优化大 XML 响应的处理方法

当处理大型XML响应时&#xff0c;我们经常会面临内存限制和性能问题。 在处理这个问题时&#xff0c;我们可以使用Python的requests库和lxml库来解决。下面是解决方案的步骤&#xff1a; 1. 使用requests库发送HTTP请求获取XML响应。 2. 检查响应的Content-Encoding标头&…

这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!

目录 一.数据库导出 1.首先创建文件以.sql结尾的文件 2.打开名mysq的解压目录&#xff0c;导出数据 3.然后在查看即可 4 需要的软件 MobaXterm 一.数据库导出 1.首先创建文件以.sql结尾的文件 通过 touch ssm.sql &#xff08;小编&#xff09; 实际上&#xff1a…

提升办公效率,畅享多功能办公笔记软件Notion for Mac

在现代办公环境中&#xff0c;高效的笔记软件对于提高工作效率至关重要。而Notion for Mac作为一款全能的办公笔记软件&#xff0c;将成为你事业成功的得力助手。 Notion for Mac以其多功能和灵活性而脱颖而出。无论你是需要记录会议笔记、管理项目任务、制定流程指南&#xf…

以makefile的方式在linux上编译代码(小白级别)

作者&#xff1a;爱塔居 作者简介&#xff1a;大四学生&#xff0c;分享自己的学习片段~ 目录 前言 一、创建主要文件 二、makefile 前言 多有不足&#xff0c;以供参考&#xff0c;欢迎大佬们指点。我是在虚拟机上执行的&#xff0c;应该都一样。我用的VirtualBox&#xff0c;…

第十篇 基于JSP 技术的网上购书系统——管理员后台管理主界面、订单管理、产品管理功能实现(网上商城、仿淘宝、当当、亚马逊)

目录 1.管理员后台管理——主界面 1.1功能说明 1.2界面设计 1.3处理流程 2.订单管理 2.1功能说明 2.2界面设计 2.3处理流程 2.4数据来源和算法 2.4.1数据来源 2.4.2查询条件 2.4.3表间关系 2.4.4相关sql实例 3.产品管理 3.1功能说明 3.2界面设计 3.3处理流程…

IF:9.0+期刊被踢除,11月SCI/SSCI期刊目录已更新!

【SciencePub学术】2023年11月20日&#xff0c;科睿唯安更新了Web of Science核心期刊目录。 继上次SCI期刊目录和SSCI期刊目录更新之后&#xff0c;本次11月更新共有5本期刊发生变动&#xff1a; • SCIE&#xff1a;有5本期刊不再被SCIE期刊目录收录&#xff0c;1本SCIE期刊更…

漆包线行业你了解多少?

今天就说说漆包线行业&#xff0c;漆包线是工业电机&#xff08;包括电动机和发电机&#xff09;、变压器、电工仪表、电力及电子元器件、电动工具、家用电器、汽车电器等用来绕制电磁线圈的主要材料。 漆包线上游是铜杆行业&#xff0c;下游是各种消费终端&#xff0c;主要是电…

微信小程序从零到发布上线,手把手教学(附精选源码250套)

零基础开发&#xff0c;如何上线小程序源码&#xff1f; 1、微信开发者工具安装 电脑端下载并安装“微信开发者工具” | 附下载地址&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 2、登录微信开发者工具 打开运行微信开发者工具…

知识表示与知识图谱

目录 前言 一、知识与知识表示的概念 二、知识图谱 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如…