在Java中,@XmlType 、@XmlRootElement、@XmlElement 这类写法是啥语法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Java中,@XmlType 、@XmlRootElement、@XmlElement 这类写法是啥语法?相关的知识,希望对你有一定的参考价值。

像这样的代码,

//------------------------
package step2;
import java.util.Set;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement
@XmlType(propOrder = "id", "name", "age","book")
public class Customer
String name;
int age;
int id;
Set<Book> book;
@XmlElement(name="name")
public String getName()
return name;


public void setName(String name)
this.name = name;


@XmlElement(name="age")
public int getAge()
return age;


public void setAge(int age)
this.age = age;

@XmlElement(name="id")
public int getId()
return id;


public void setId(int id)
this.id = id;


@Override
public String toString()
return "Customer [id=" + id + ",name=" + name + ",age=" + age + ",book=" + book + "]";

@XmlElementWrapper(name="books")
@XmlElement(name="book")
public Set<Book> getBook()
return book;


public void setBook(Set<Book> book)
this.book = book;


这些是JAXB注解,可以通过JAXB轻松实现对象和XML之间的转换。 参考技术A annotation,注解

Java - 如何在 @XmlType 中动态设置 propOrder 属性

【中文标题】Java - 如何在 @XmlType 中动态设置 propOrder 属性【英文标题】:Java - How to set propOrder attribute dynamically within @XmlType 【发布时间】:2021-10-08 04:18:23 【问题描述】:

我有一个带有 xml 注释的类,它将被实例化然后用于生成一个 xml 文件。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = 
    "foo", "bar", "baz"
)
public class MyClass 

    @XmlElement(name = "foo", required = true)
    protected String foo;

    @XmlElement(name = "bar", required = true)
    protected String bar;

    @XmlElement(name = "baz", required = true)
    protected String baz;

    ...

我想使用这样的变量(例如version)动态设置属性propOrder

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = version.equals("1") ? "foo", "bar", "baz" : "bar", "baz", "foo"
)
public class MyClass 

    @XmlElement(name = "foo", required = true)
    protected String foo;

    @XmlElement(name = "bar", required = true)
    protected String bar;

    @XmlElement(name = "baz", required = true)
    protected String baz;

    ...

所以基于这个version参数,生成的xml文件会是这样的

<foo></foo>
<bar></bar>
<baz></baz>

or 

<bar></bar>
<baz></baz>
<foo></foo>

有什么想法吗?

【问题讨论】:

【参考方案1】:

这是不可能的。注解在编译时处理。

PS:在纯java中是不可能的。如果你真的想要,你可以使用某种预处理器。

【讨论】:

以上是关于在Java中,@XmlType 、@XmlRootElement、@XmlElement 这类写法是啥语法?的主要内容,如果未能解决你的问题,请参考以下文章

在Java中,@XmlType 、@XmlRootElement、@XmlElement 这类写法是啥语法?

如何使用 java.sql 包中的 rs.getSQLXML() 函数从 Oracle 数据库中获取 XMLType 列?

使用 XMLRoot/XMLElement 和使用 Serializable() 属性之间的区别(在 c# 中)

如何使用 jdbc 和 java-swing 从特定列中检索完整的 xml(DataType as XMLTYPE)

PL/SQL 函数中的 XmlRoot、XmlElement、InsertChildXml 给出 PLS-00201 必须声明标识符

CXF之"@XmlType.name 和 @XmlType.namespace 为类分配不同的名称"错误