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

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;
    }    
}

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

相关文章:

  • Linux学习教程(第四章 Linux打包(归档)和压缩)
  • Flume学习笔记(2)—— Flume进阶
  • The import xxx.xxx.xxxx is never used
  • rpc依赖安装
  • Qt调起Mac“系统设置”面板
  • Ubuntu18.04平台下Qt开发程序打包的一些问题总结
  • 最新自动定位版本付费进群系统源码
  • Vue3-ref、reactive函数的watch
  • [工业自动化-23]:西门子S7-15xxx编程 - 软件编程 - 西门子PLC人机界面交互HMI功能概述、硬件环境准备、软件环境准备
  • 【电路笔记】-快速了解无源器件
  • C#密封类和密封成员
  • Django实战项目-学习任务系统-任务完成率统计
  • 【Spring】IoC容器的一些总结与补充
  • 飞腾ARM UOS编译Qt 5.15.2源码及Qt Creator
  • spark与scala的对应版本查看
  • 【机器学习】决策树算法理论:算法原理、信息熵、信息增益、预剪枝、后剪枝、算法选择
  • Matlab自学笔记二十四:字符串的关系运算和比较
  • 软件测试面试-如何定位线上出现bug
  • C++ 多线程使用
  • Java学习之路 —— IO、特殊文件
  • 上交所五方面落实募资新规:强化关键少数责任和股东权利保障
  • 费高云不再担任安徽省人民政府副省长
  • 体坛联播|C罗儿子完成国家队首秀,德约结束与穆雷合作
  • 乌方:泽连斯基只接受与普京会谈,拒见其他俄代表
  • 外交部:正确认识和对待历史是检验日本能否恪守和平发展承诺的重要标准
  • “降息潮”延续,多家民营银行下调存款利率