【问题标题】:Using JAXB annotations with RestEasy将 JAXB 注释与 RestEasy 一起使用
【发布时间】:2012-05-29 15:28:01
【问题描述】:

我正在尝试将 JAXB 注释与 RestEasy 一起使用,以便在我的 JSON 输出中选择名称和元素顺序。

不知何故,它不起作用,即使 RestEasy 文档说它是可能的。

这里有一些代码:

@XmlRootElement(name = "translation")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "translation", propOrder = {
    "key",
    "value"
})
public class TranslationDTO {

  public TranslationDTO() {}
  public TranslationDTO(Translation translation) {
    setKey(translation.getTranslationKey().getValue());
    setValue(translation.getContent());
    //setCreationDate(translation.getCreatedTimestamp());
  }

  @XmlElement(name = "key")
    private String key;

  @XmlElement(name = "value")
    private String value;

    //private Date creationDate;

    @XmlElement(name = "key")
    public String getKey() {
    return key;
  }

    public void setKey(String key) {
    this.key = key;
  }

    @XmlElement(name = "value")
    public String getValue() {
    return value;
  }

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

    /*@XmlElement(name = "creationDate")
    public Date getCreationDate() {
    return creationDate;
  }

    public void setCreationDate(Date creationDate) {
    this.creationDate = creationDate;
  }*/

}

这里是一个示例输出:

{
    "name":"i18nhelp",
    "currentVersion":"1",
    "currentTotalKeys":28,
    "oldTotalKeys":0,
    "totalLanguages":2,
    "languageDtos":[{
        "name":"Anglais",
        "iso639":"en",
        "totalCurTrans":28,
        "newCurTrans":28,
        "oldTrans":0
    },
    {
        "name":"Français",
        "iso639":"fr",
        "totalCurTrans":28,
        "newCurTrans":28,
        "oldTrans":0
    }]
}

似乎根本没有考虑 JAXB 注释。

任何想法都会被考虑...

【问题讨论】:

  • 不是 XmlAccessType.PROPERTY 自动为字段绑定 getter 和 XmlAccessType.FIELD 吗?您是否尝试删除多余的注释?还是改用 XmlAccessType.NONE?
  • 感谢您的反馈。顺便说一句,Blaise 的博客很好,很有帮助。实际上,似乎根本没有考虑 JAXB 注释。我编辑了问题以使其更清楚。
  • @guido:阅读 Blaise 的博客后,我认为我应该使用 XmlAccessType.NONE 并删除我的 getter 的注释。

标签: java web-services annotations jaxb resteasy


【解决方案1】:

如果您使用 JBoss(或现在称为 WildFly)作为应用程序服务器,您可能正在使用 Jackson (http://jackson.codehaus.org/) JSON marshaller 体验 RestEasy,它有自己的注释 - 您可以找到链接的文档杰克逊的主页。它们比“仅”JAXB 更具表现力,如果您专门针对 JSON 输出,可能需要考虑它们。

如果您只想使用 JAXB,如您的示例所示,您可以通过在 jboss-deployment-structure.xml 中指定要使用的 resteasy 提供程序模块从 Jackson 切换到不同的东西,如 this answer 中所述。

【讨论】:

  • 我无法检查您的回答是否解决了我当时遇到的问题,因为我不在同一家公司工作。不过你的观点很有趣。我不知道杰克逊有自己的注释。这是否意味着它不符合 JAXB?
  • 令我很沮丧的是,可悲的是,Jackson 似乎与 JAXB 不兼容。至少从我工作的 JBoss 中包含的版本(7.1.1)开始,即 Jackson 1.9.2。 IMO,Jackson 产生了更健全的 JSON,这就是为什么对于我的情况,我选择坚持使用它并使用 JAXB 以及 Jackson 注释来注释所有内容。
猜你喜欢
  • 2011-06-19
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 2016-07-01
  • 1970-01-01
  • 2019-10-14
  • 2013-11-06
相关资源
最近更新 更多