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

JAXB的XmlElement注解

依赖

  • 如果基于JAX-WS开发,可以在maven工程的pom.xml文件中增加如下依赖,会将依赖的JAXB库也下载下来:
<dependency>
  <groupId>jakarta.xml.ws</groupId>
  <artifactId>jakarta.xml.ws-api</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>jaxws-rt</artifactId>
  <version>4.0.0</version>        
</dependency>
  • 如果只想使用JAXB库,可以在maven工程的pom.xml文件中增加如下依赖:
<dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>4.0.3</version>
</dependency>

XmlElement注解可以用在什么地方

XmlElement注解可以用在Java的属性上

备注: 如果XmlElement注解用在Java的属性上,该属性就不能出现getter和setter方法,否则运行出错

例如,下面片段XmlElement注解的属性name = "flag"指定了映射到xml中元素的名字是flag。如果不指定,xml元素的名字就会是functionCode

@XmlElement(name = "flag")
private int functionCode;

XmlElement注解可以用在属性的getter方法上

例如:

@XmlElement(name = "flag")
public int getFunctionCode() {
    return this.functionCode;
}

我感觉这种方法是灵活的,原因:

  • XmlElement注解用在属性的getter方法上,既能够修改映射到xml中的元素的名称,也方便在代码中设置属性。因为如果类的属性很多的话,直接用构造函数感觉太长了。
  • 如果直接注解在属性上,尽管也可以修改映射到xml中的元素的名称,但设置属性的值就必须用类的构造函数,不太方便。原因就是如果映射到属性上,那么该类属性就不能出现getter和setter方法,否则运行出错。

例如,下面用在getFunctionCode()方法上,设置了了映射到xml中的元素名称是flag

private int functionCode;

@XmlElement(name = "flag")
public int getFunctionCode() {
    return this.functionCode;
}

public void setFunctionCode(int functionCode) {
    this.functionCode = functionCode;
}

在调用的地方设置属性的值:

RegisterResponse registerResponse = new RegisterResponse();
registerResponse.setFunctionCode(1);

如果 XmlElement注解用在属性上,同时类中有针对该属性的getter和setter方法,是会出错的

例如,下面这段代码,XmlElement注解用在属性functionCode上,同时,有针对functionCode的getFunctionCode和setFunctionCode方法,运行就会出错,提醒有两个属性具有相同的名称(为了突出重点,调用的代码没有贴出来):

package com.thb.server.register;

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "response")
public class RegisterResponse {

    @XmlElement(name = "flag")
    private int functionCode;

    public RegisterResponse() {}

    public int getFunctionCode() {
        return this.functionCode;
    }

    public void setFunctionCode(int functionCode) {
        this.functionCode = functionCode;
    }    
}

运行出错:
在这里插入图片描述

XmlElement注解的属性

required属性

如果没有设置为true,那么对于JavaJavabean映射到XML schema的元素声明会有minOccurs=“0”。

Java的字符串属性不设置、设置XmlElement注解的 required属性

  • 例如,Java的字符串属性secret,没有设置XmlElement注解的 required属性:
private String secret;

@XmlElement(name="secret")
public String getSecret() {
    return this.secret;
}

生成XML schema:
在这里插入图片描述

在生成的XML schema中,secret元素的minOccurs=“0”:
在这里插入图片描述

  • 设置XmlElement注解的 required = true
private String secret;

@XmlElement(name="secret", required = true)
public String getSecret() {
    return this.secret;
}

生成XML schema:
在这里插入图片描述

在生成的XML schema中,secret元素没有minOccurs=“0”:
在这里插入图片描述


http://www.kler.cn/a/134418.html

相关文章:

  • C++算法练习-day40——617.合并二叉树
  • 手动实现promise的all,race,finally方法
  • redis bind 127.0.0.1和bind 10.34.56.78的区别
  • C++ 的协程
  • HBase使用create创建表时报错ERROR: KeeperErrorCode = NoNode for /hbase/master
  • Kubernetes在容器编排中的应用
  • 如何通过算法模型进行数据预测
  • 浏览器内置NoSQL数据库IndexedDB
  • Tensorflow2.0:CNN、ResNet实现MNIST分类识别
  • 求二叉树的高度(可运行)
  • buildadmin+tp8表格操作(3)----表头上方按钮绑定事件处理,实现功能(选中或取消指定行)
  • 互联网摸鱼日报(2023-11-20)
  • wpf devexpress post 更改数据库
  • kafka分布式安装部署
  • 【微信小程序篇】- 组件
  • 算法设计与分析复习--贪心(一)
  • 特效!视频里的特效在哪制作——Adobe After Effects
  • java智慧校园信息管理系统源码带微信小程序
  • 【wp】2023第七届HECTF信息安全挑战赛 Web
  • 什么是Selenium?如何使用Selenium进行自动化测试?
  • 初刷leetcode题目(4)——数据结构与算法
  • C# Array和ArrayList有什么区别
  • WPF拖拽相关的类
  • 详解Java设计模式之职责链模式
  • S7-1200PLC 作为MODBUSTCP服务器通信(多客户端访问)
  • Web安全研究(五)