@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);
}
}
}
}
请告诉我。 感谢
答案 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;
}
}