2016-09-07 20 views
0

目前,我有以下REST終點閱讀JSON輸入,既可以是可空和可選

@PUT 
@Path("/props") 
public Response update(Props input) { .. } 

和我的輸入參數是:

@XmlAccessorType(XmlAccessType.FIELD) 
class Props { 
    public String prop1; 
    public String prop2; 
} 

客戶端發送輸入作爲JSON字符串。我希望這兩個參數都是可以爲空和可選的。例如:如果客戶想不更新PROP1更新PROP2爲空值,它可以發送:

{"prop2":null} 

但在這一點上,我看到兩個input.prop1 = nullinput.prop2 = null

如何區分客戶端是否發送了一個空值的道具或根本沒有發送道具?

+0

由於Java String只有'null'和not-'null',你如何讓你的代碼區分「未發送」的情況「發送爲空」? – dbreaux

+0

@dbreaux這就是我要求的。我期望這樣的常見問題有某種傳統的解決方案 – Jack

+0

由於Java沒有自然的方式來區分sent-as-null和not-sent,所以我懷疑是否有標準的JAXB/JSON解組行爲。我懷疑任何主要的圖書館都會將這兩種情況解除爲空。 Java中唯一的替代方法是定義爲「省略」的一些特殊字符串。您可能必須使用較低級別的API調用來解析它。 – dbreaux

回答

0

如果你想將它設置爲null,將它設爲一個空字符串不是更好嗎,如果根本沒有發送任何東西,那麼null會更好嗎?

+0

這不會讓你區分,如果一個值沒有通過或傳遞$ custom-null值 – Jack

+0

你也可以傳遞另一個參數,它是所有傳遞參數的組合 –

0

所有引用類型變量都用null初始化。你可以選擇一些「無意義」的值進行初始化。

+0

感謝您的想法。我目前正在尋找更多..聲音。但這將是我的備份解決方案 – Jack

+0

嗯。另一種方法是接受Map 作爲'update'方法參數,並用Map.containsKey() –

相關問題