2016-01-22 77 views
0

我在我們的項目中定義了一個REST元素,該元素包含具有原始int &長度的屬性。我正在使用Jersey 2.17 在測試過程中,當我嘗試傳遞一個「」字符串時,REST客戶端沒有報告任何驗證錯誤,但在剩餘資源中,我將該原語的值作爲默認值0。非常奇怪,因爲在這種情況下不應接受空字符串。如何通過驗證錯誤使請求失敗。jackson json解析器接受int原語的空單引號

My JSON request: 
JSONObject employee = new JSONObject("{name : James}");  
rateLimiter.put("age", ""); 

Response : 
POST -><http://134.141.206.113:8080/Employee  > 
data: {"name":"James","age":""} 
Status :201 output: { 
    "name" : "James", 
    "age" : 0 
} 

回答

0

檢查有效負載的字段是否爲空或null的一種方法是使用Jackson的註釋在反序列化時跳過這些字段。這樣,如果反序列化的對象中不存在強制性字段,則可以假定在請求發生時該字段爲空。

傑克遜的註解

  1. @JsonInclude(Include.NON_NULL)
  2. @JsonInclude(Include.NON_DEFAULT)

加入他們其中的字段在DTO /實體類中聲明頂部

@JsonInclude(Include.NON_DEFAULT) 
private int age = 0; 

@JsonInclude(Include.NON_NULL) 
private String name; 
+0

斯里蘭卡感謝,但你的回答非常模糊,我已經提到我使用球衣2.17。我正在尋找帶有JSON映射器或可能是自定義反序列化器的任何配置的指針。 – Nawaz

+0

@Nawaz我已經更新了可以幫助您完成必修項目的註釋。希望這可以幫助 – Srikanta

+0

我感謝幫助,但我想要失敗的請求。我需要客戶端來驗證錯誤,您提供的選項只會排除它們。對於我的用例,一些實體中的原始字段是可選的,這意味着用戶可以跳過這個,但是如果他給出的值不應該是空字符串。我有很多實體,我正在尋找解決方案來做一次,而不是用註釋標記每個屬性。我試過自定義序列化器/反序列化器,沒有運氣,我會添加源代碼。我想知道這是否是唯一的選擇。 – Nawaz