如何在Java Pojo中区分JSON空值和默认Java空值

时间:2018-08-24 05:36:00

标签: java rest apache-camel camel-cxf

我在JSON以下理解

  

{:“ 1”,“ value”:“某些值”}

  

{:“ 2”,“ value”:null}

  

{’“ id”:“ 3”}

要保存上述JSON数据,我有java类:

    class myClass
    {
       private String id;
       private String value;
       public String getId() {
        return id;
       }
       public void setId(String id) {
        this.id = id;
       }
       public String getValue() {
        return value;
       }
       public void setValue(String value) {
        this.value = value;
      }
}

在上面的示例中:id 2和id 3的值均为NULL

在Java中,很难区分JSON中传递的null值和其他未传递的字段,因此java pojo的默认值为NULL。

对我而言,id 2和id 3的值不应相同。

是否可以在Java中区分提供的JSON NULL和默认NULL?

3 个答案:

答案 0 :(得分:2)

最好不要完全区分null missing 值,原因是您不得不问这个问题:并非所有JSON库都可以实现这种区分,尤其是在自动转换为POJO。

它是否有效取决于JOSN库,但是您可以尝试向POJO添加一个附加标志,该标志是在调用setter时设置的。例如这样的

class MyClass {

    private String value;
    private boolean isSetValue;

    public String getValue() {
        return value;
    }

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

    public boolean getIsSetValue() {
        return isSetValue;
    }
}

如果您打算序列化此POJO,则需要从序列中排除getIsSetValue,并且可能需要修改JSON序列化程序以使用getIsSetValue来决定是否写入null值或根本没有价值。

答案 1 :(得分:0)

我能想象的唯一可能的解决方案:跟踪对setter的调用,并确保您使用的jSON库设置了显式的null值。

将给出以下结果:

  • id 1:以“某些值”调用的二传手
  • id 2:使用null调用的setter
  • id 3:setter 被叫

Torbens评论后的替代方案: 如果该库不使用getters / setters,则可以对“ unset”使用特殊值,并在getter中对其进行屏蔽以返回null。

答案 2 :(得分:0)

使用此代码:

JSONObject jsonObject = new JSONObject(response);
Sting s =  jsonObject.optString("value");

为此  {“ id”:“ 2”,“ value”:null} 它将返回null为JAVA Sting

jsonObject.optString("value"); // s="null"

为此  {“ id”:“ 3”} 它将返回空值

jsonObject.optString("value"); // s==null
相关问题