ObjectMapper序列化和反序列化特性
2023-12-14 10:41:31
@Component
public class ObjectMapperBuilderCustomizer implements Jackson2ObjectMapperBuilderCustomizer, Ordered {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
//若POJO对象的属性值为null,序列化时不进行显示
jacksonObjectMapperBuilder.serializationInclusion(JsonInclude.Include.NON_NULL);
//若POJO对象的属性值为"",序列化时不进行显示
jacksonObjectMapperBuilder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
//DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES相当于配置,JSON串含有未知字段时,反序列化依旧可以成功
jacksonObjectMapperBuilder.failOnUnknownProperties(false);
//序列化时的命名策略——驼峰命名法
jacksonObjectMapperBuilder.propertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
//针对于Date类型,文本格式化
jacksonObjectMapperBuilder.simpleDateFormat("yyyy-MM-dd HH:mm:ss");
//针对于JDK新时间类。序列化时带有T的问题,自定义格式化字符串
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
jacksonObjectMapperBuilder.modules(javaTimeModule);
// jacksonObjectMapperBuilder.featuresToEnable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
//默认关闭,将char[]数组序列化为String类型。若开启后序列化为JSON数组。
jacksonObjectMapperBuilder.featuresToEnable(SerializationFeature.WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS);
//默认开启,若map的value为null,则不对map条目进行序列化。(已废弃)。
// 推荐使用:jacksonObjectMapperBuilder.serializationInclusion(JsonInclude.Include.NON_NULL);
jacksonObjectMapperBuilder.featuresToDisable(SerializationFeature.WRITE_NULL_MAP_VALUES);
//默认开启,将Date类型序列化为数字时间戳(毫秒表示)。关闭后,序列化为文本表现形式(2019-10-23T01:58:58.308+0000)
//若设置时间格式化。那么均输出格式化的时间类型。
jacksonObjectMapperBuilder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
//默认关闭,在类上使用@JsonRootName(value="rootNode")注解时是否可以包裹Root元素。
// (https://blog.csdn.net/blueheart20/article/details/52212221)
// jacksonObjectMapperBuilder.featuresToEnable(SerializationFeature.WRAP_ROOT_VALUE);
//默认开启:如果一个类没有public的方法或属性时,会导致序列化失败。关闭后,会得到一个空JSON串。
jacksonObjectMapperBuilder.featuresToDisable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
//默认关闭,即以文本(ISO-8601)作为Key,开启后,以时间戳作为Key
jacksonObjectMapperBuilder.featuresToEnable(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS);
//默认禁用,禁用情况下,需考虑WRITE_ENUMS_USING_TO_STRING配置。启用后,ENUM序列化为数字
jacksonObjectMapperBuilder.featuresToEnable(SerializationFeature.WRITE_ENUMS_USING_INDEX);
//仅当WRITE_ENUMS_USING_INDEX为禁用时(默认禁用),该配置生效
//默认关闭,枚举类型序列化方式,默认情况下使用Enum.name()。开启后,使用Enum.toString()。注:需重写Enum的toString方法;
jacksonObjectMapperBuilder.featuresToEnable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
//默认开启,空Collection集合类型输出空JSON串。关闭后取消显示。(已过时)
// 推荐使用serializationInclusion(JsonInclude.Include.NON_EMPTY);
jacksonObjectMapperBuilder.featuresToEnable(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS);
//默认关闭,当集合Collection或数组一个元素时返回:"list":["a"]。开启后,"list":"a"
//需要注意,和DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY 配套使用,要么都开启,要么都关闭。
// jacksonObjectMapperBuilder.featuresToEnable(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED);
//默认关闭。打开后BigDecimal序列化为文本。(已弃用),推荐使用JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN配置
// jacksonObjectMapperBuilder.featuresToEnable(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN);
//默认关闭,即使用BigDecimal.toString()序列化。开启后,使用BigDecimal.toPlainString序列化,不输出科学计数法的值。
jacksonObjectMapperBuilder.featuresToEnable(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN);
/**
* JsonGenerator.Feature的相关参数(JSON生成器)
*/
//默认关闭,即序列化Number类型及子类为{"amount1":1.1}。开启后,序列化为String类型,即{"amount1":"1.1"}
jacksonObjectMapperBuilder.featuresToEnable(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS);
/******
* 反序列化
*/
//默认关闭,当JSON字段为""(EMPTY_STRING)时,解析为普通的POJO对象抛出异常。开启后,该POJO的属性值为null。
jacksonObjectMapperBuilder.featuresToEnable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
//默认关闭
// jacksonObjectMapperBuilder.featuresToEnable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
//默认关闭,若POJO中不含有JSON中的属性,则抛出异常。开启后,不解析该字段,而不会抛出异常。
jacksonObjectMapperBuilder.featuresToEnable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
}
}
文章来源:https://blog.csdn.net/zzztimes/article/details/134988640
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!