gpt4 book ai didi

java - 具有多个属性的 Jax-ws 枚举

转载 作者:行者123 更新时间:2023-12-04 04:46:05 25 4
gpt4 key购买 nike

我有一个类型类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="Record")
public class Record
{
@XmlAttribute(name="status")
private Status status ;
}

和枚举类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"status","error"})
@XmlEnum
public enum Status
{
OK(0, "No error"),
ERROR(1, "Some error") ;

@XmlAttribute(name="status", required=true)
private Integer status ;
@XmlAttribute(name="error", required=true)
private String error ;

private Status(Integer status, String error)
{
this.status=status ;
this.error=error ;
}

@Override
public String toString()
{
return "Status:" + this.status + " Error:" + this.error;
}
}

我得到的结果是:记录状态=“OK”
但我想要:记录状态=“OK”错误=“没有错误”

我怎样才能做到这一点?

最佳答案

这不像您期望的那样工作,因为 JAXB 获取枚举名称而不是使用 toString()方法。但即使这样做了,它仍然不会产生您想要的输出。它会产生:

<record status="Status:0 Error:No error"/>

使用普通的 JAXB 无法将单个字段自动扩展为多个 XML 属性。 MOXy JAXB 实现确实允许您执行此操作,但我怀疑您是否正在使用此实现(有关更多信息,请参阅 this question。)

最简单的解决方案是添加另一个包含错误消息的属性。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="Record")
public class Record
{
@XmlAttribute(name="status")
private Status status ;

@XmlAttribute(name="error")
private String getError(){
return status.getError();
}
}

public enum Status
{
OK(0, "No error"),
ERROR(1, "Some error") ;

private Integer status ;
private String error ;

private Status(Integer status, String error)
{
this.status=status ;
this.error=error ;
}

public String getError(){
return this.error;
}
}

此外,您实际上不需要 Status 上的任何 JAXB 注释。枚举。唯一需要的时候是如果您希望 XML 中打印的值与枚举值不同(就像您希望 OK 在 XML 中显示为 ok 一样)。请参阅@XmlEnum 和@XmlEnumValue 注释 here .

关于java - 具有多个属性的 Jax-ws 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18171740/

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