当json值为null时,@ jsondeserialize不起作用

时间:2017-10-02 00:43:01

标签: json jackson deserialization json-deserialization

在这种情况下,

@JsonDeserialize对null json值不起作用。这是投掷错误

//我有以下json字符串。

            {
                "myCount": null
            }

//类

                public class Test {
                  // @JsonDeserialize does not work for null json value in this case. it is throwing error.
                 @JsonDeserialize (using = Custom.class)
                 private double myCount;
            }

//自定义反序列化器

             public class Custom extends JsonDeserializer<Double> {
                //implements deserialize method
                @Override
                public Double deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
                String text = jp.getText();
                if (text == null || text.isEmpty()) {
                 return null;
                } else {
                return Double.valueOf(text);
                }
                    }
                }
            }

请告诉我。 感谢

2 个答案:

答案 0 :(得分:0)

问题是你的字段是原始的double而不是Double。因此,它不能接受null。

private double myCount;更改为private Double myCount;,它应该可以正常工作。

有关其差异的更多信息,请参阅this link

答案 1 :(得分:0)

如果您的问题是您使用的是原始double,那么Arashsoft会为您提供答案。但是我怀疑您还会遇到其他问题。

在我看来,您的解串器没有执行默认的解串器所需的任何其他操作,因此按照您的书面说明,您是不必要的。

您正在调用jp.getText(),如果您的String值用引号引起来,则只会返回JSON,例如`“ myCount”:“ 123.45”,但这不是您想要的。

如果您想截取通常分配给myCount字段的null,则必须在解串器中覆盖getNullValue()。实现将取决于您使用的JSON库,但是对我来说,这可行:

package ca.mydomain.myapp.util;

import java.io.IOException;

import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.DeserializationContext;
import org.codehaus.jackson.map.deser.std.StdDeserializer;

public class JsonDefaultZeroDoubleDeserializer extends StdDeserializer<Double>
{

    protected JsonDefaultZeroDoubleDeserializer () { this (null); }

    protected JsonDefaultZeroDoubleDeserializer (Class<?> vc)
    {
        super (vc);
    }

    @Override
    public Double deserialize (JsonParser sp, DeserializationContext dCtxt) throws IOException, JsonProcessingException
    {
        return sp.getCodec().readTree (sp).asDouble ();
    }

    @Override
    public Double getNullValue ()
    {
        return 0.00;
    }
}