一、忽略null值
在实际开发中,我们经常会遇到需要忽略null值的情况,例如返回给前端的数据如果有null值会让前端出现异常。这时我们可以使用ObjectMapper
类中的一些方法来忽略null值。
首先,我们可以在全局配置中设置ObjectMapper
的序列化参数:
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
在这个配置中,我们将ObjectMapper
的序列化策略设置为NON_NULL
,这样在序列化Java对象时,只有非null值才会被序列化。
另外,如果我们只需要在某个特定的情况下忽略null值,我们可以使用@JsonIgnoreProperties
注解:
public class User {
private Long id;
private String name;
@JsonIgnoreProperties(value = {"email"})
private String email;
// getters and setters
}
在这个注解中,我们将email
属性标注为需要忽略的属性。这样,在序列化User
对象时,email
属性的值为null就会被忽略。
二、自定义配置
除了忽略null值外,我们还可以自定义ObjectMapper
的配置,以满足我们的具体需求。
比如,我们可以设置日期格式:
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
这样,在序列化或反序列化Java对象中的日期属性时,都会按照指定的格式进行处理。 另外,我们还可以自定义序列化或反序列化的实现:
public class CustomSerializer extends JsonSerializer<LocalDate> {
@Override
public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}
}
public class CustomDeserializer extends JsonDeserializer<LocalDate> {
@Override
public LocalDate deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
return LocalDate.parse(p.getText(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
}
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(LocalDate.class, new CustomSerializer());
module.addDeserializer(LocalDate.class, new CustomDeserializer());
mapper.registerModule(module);
在这个例子中,我们自定义日期类型LocalDate
的序列化和反序列化实现,并将它们注册到ObjectMapper
中。这样,在序列化或反序列化Java对象中的LocalDate
属性时,都会使用我们自定义的实现。
三、参考资源
通过本文的介绍,相信读者对ObjectMapper
已经有了整体的了解。如果还需要更深入地学习ObjectMapper
,可以参考以下资源:
ObjectMapper
官方文档:https://github.com/FasterXML/jackson-databind/- 《深入浅出Spring Boot 2.x》一书的第十章
ObjectMapper
的Github仓库:https://github.com/FasterXML/jackson-databind/