2014-04-01 39 views
3

我目前正試圖使用​​Glassfish 4(使用Jersery 2.0和EclipseLink 2.5)解組通過REST PUT提供的JSON對象。使用JAX-RS和MOXy處理無效枚舉

JSON對象由多個屬性組成,包括一個映射到Java Enum的String值。

一切工作爲當在有效負載中輸入了無效的ENUM值從預期開

JSON對象:

{ 
    "rating":"INVALID", 
    ... 
} 

被解組成:

public RatingInfo { 
    @ValidRating 
    private Rating rating; 
    ... 

    public Rating getRating(){...} 
    public void setRating(Rating rating){...} 
    ... 
} 

public enum Rating { 
    G, 
    PG 
} 

如果該值在JSON有效負載中不是有效的額定值,它當前返回空值,這似乎是JAXB忽略轉換錯誤的結果,請參見Handling invalid enum values while doing JAXB Unmarshalling

問題是我需要區分Rating實際爲null(這是有效的用例)與JSON中的Rating值無效的情況,以便我可以在REST響應中返回400錯誤。

我無法弄清楚如何做的是覆蓋忽略使用JAX-RS和MOXY作爲默認提供程序時的轉換錯誤的默認行爲。

回答

0

我已經在RatingInfo改變評級枚舉變量爲一個字符串,現在工作了一問題爲:

public RatingInfo { 
    @ValidRating 
    private String rating; 
    .... 
} 

在ValidRating豆驗證然後我驗證對枚舉的字符串值,以確保在傳遞字符串是一個有效的評級,如果這失敗框架拋出ConstraintViolationException,我映射到400.

這不是理想的,因爲我寧願在我的RatingInfo bean中使用枚舉,但它現在確實解決了問題。

0

最簡單的做法是自己創建XmlAdapter並處理Stringenum的轉換。然後,當價值不正確時,您可以採取相應措施。

+0

我已經厭倦了。問題在於適配器中拋出的任何異常都被JAXB吞噬,就像上面的轉換錯誤一樣。 – lucasweb