gpt4 book ai didi

java - JAXB + 枚举 + 显示多个值

转载 作者:搜寻专家 更新时间:2023-10-31 20:07:01 62 4
gpt4 key购买 nike

我有一个枚举:

@XmlEnum
@XmlRootElement
public enum Product {
POKER("favourite-product-poker"),
SPORTSBOOK("favourite-product-casino"),
CASINO("favourite-product-sportsbook"),
SKILL_GAMES("favourite-product-skill-games");

private static final String COULD_NOT_FIND_PRODUCT = "Could not find product: ";

private String key;

private Product(final String key) {
this.key = key;
}

/**
* @return the key
*/
public String getKey() {
return key;
}

我像这样在 REST 服务中输出:

GenericEntity<List<Product>> genericEntity = new GenericEntity<List<Product>>(products) {
};
return Response.ok().entity(genericEntity).build();

它的输出是这样的:

<products>
<product>POKER</product>
<product>SPORTSBOOK</product>
<product>CASINO</product>
<product>SKILL_GAMES</product>
</products>

我希望它同时输出枚举名称(即 POKER)和 key (即“favourite-product-poker”)。

我已经尝试了很多不同的方法来做到这一点,包括使用@XmlElement、@XmlEnumValue 和@XmlJavaTypeAdapter,但没有同时使用它们。

有谁知道如何实现这一点,就像普通的 JAXB 注释 bean 一样?

谢谢。

最佳答案

您可以为此创建一个包装器对象,例如:

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;

@XmlRootElement(name="product")
public class ProductWrapper {

private Product product;

@XmlValue
public Product getValue() {
return product;
}

public void setValue(Product value) {
this.product = value;
}

@XmlAttribute
public String getKey() {
return product.getKey();
}

}

这将对应于以下 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<product key="favourite-product-poker">POKER</product>

您需要将 ProductWrapper 的实例传递给 JAXB 而不是 Product。

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class Demo {

public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(ProductWrapper.class);

ProductWrapper pw = new ProductWrapper();
pw.setValue(Product.POKER);

Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(pw, System.out);
}

}

关于java - JAXB + 枚举 + 显示多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3708147/

62 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com