使用JAX-RS(GlassFish 4)和Jackson作为序列化程序,我在反序列化Double
类型的POJO属性(与Integer
相同)时遇到了一个问题。
可以说我有一个简单的POJO(不包括许多其他杂项,getter和setter):
public class MapConstraints {
private Double zoomLatitude;
private Double zoomLongitude;
}
当用户以
{ "zoomLatitude": "14.45", "zoomLongitude": ""}
格式向API发送请求时,zoomLatitude
的值设置为14.45
,但是zoomLongitude
的值设置为0
。如果没有值,我希望
zoomLongitude
的值是null
。我尝试用ObjectMapper
配置JsonInclude.Include.NON_EMPTY
,但是没有成功。与genson的结果相同。
最佳答案
您可以使用@JsonInclude
注释POJO,以指示哪些值将被(反)序列化:
@JsonInclude(Include.NON_EMPTY)
private Double zoomLongitude
在Jackson 2.6中,以下values可用:
ALWAYS
NON_ABSENT
NON_DEFAULT
NON_EMPTY
NON_NULL
USE_DEFAULTS
但是,如果
@JsonInclude
values不符合您的需求,则可以创建自定义的JsonDeserializer
:public class CustomDeserializer extends JsonDeserializer<Double> {
@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);
}
}
}
然后用
@JsonDeserialize
注释您的字段,指示要使用的反序列化器:public class MapConstraints {
@JsonDeserialize(using = CustomDeserializer.class)
private Double zoomLatitude;
@JsonDeserialize(using = CustomDeserializer.class)
private Double zoomLongitude;
}
关于java - jackson 强制为零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33548768/