2012-05-29 59 views
2

我正在嘗試將JAXB註釋與RestEasy一起使用,以便在我的JSON輸出中選擇名稱和元素順序。在RestEasy中使用JAXB註釋

不知何故,它不工作,即使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標註不考慮採取在所有。

任何想法將被視爲...

+0

是不是XmlAccessType.PROPERTY爲字段自動綁定getters和XmlAccessType.FIELD?你嘗試刪除多餘的註釋嗎?或者改爲使用XmlAccessType.NONE? –

+2

以下內容可能有所幫助:http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html –

+0

感謝您的反饋。順便說一下,好的和有用的博客,Blaise。實際上,JAXB註釋似乎根本不被考慮。我編輯了這個問題,使之更加清晰。 –

回答

2

如果您正在使用JBoss(或WildFly,因爲它是現在所謂的)作爲應用服務器,您可以使用傑克遜遇到RestEasy的(http://jackson.codehaus.org/)JSON編組,其中有它自己的註釋 - 你可以找到從傑克遜的主頁鏈接的文檔。它們比「只是」JAXB更具表現力,如果您只專門針對JSON輸出,您可能需要考慮它們。

如您所示,如果您只想使用JAXB,您可以通過在jboss-deployment-structure.xml中指定要使用哪個resteasy提供程序模塊來從Jackson切換到其他不同的模式,詳見this answer

+0

我無法檢查您的答案是否解決了當時我遇到的問題,因爲我不是爲同一家公司工作。但是,你的觀點很有趣。我不知道傑克遜有自己的註釋。這是否意味着它不符合JAXB? –

+1

不幸的是,傑克遜似乎並沒有與JAXB兼容。至少在JBoss I工作的版本(7.1.1)中是傑克遜1.9.2。國際海事組織,傑克遜生產更加精緻的JSON,這就是爲什麼我的情況,我選擇堅持它,並用JAXB和傑克遜註釋來標註所有內容。 – r007