spring Jackson 配置笔记
配置代码
// 设置输出时包含属性的风格
this.findAndRegisterModules();
this.setSerializationInclusion(JsonInclude.Include.NON_NULL)
// 允许单引号、允许不带引号的字段名称
this.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true)
this.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true)
this.configure(MapperFeature.USE_STD_BEAN_NAMING, true)
this.setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
this.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
this.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);
this.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
this.setDateFormat(SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
// 设置输入时忽略在JSON字符串中存在但Java对象实际没有的属性
this.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
// 空值处理为空串
this.serializerProvider.setNullValueSerializer(object : JsonSerializer<Any>() {
@Throws(IOException::class, JsonProcessingException::class)
override fun serialize(value: Any, jgen: JsonGenerator,
provider: SerializerProvider) {
jgen.writeString("")
}
})
// 设置时区
this.setTimeZone(TimeZone.getDefault())//getTimeZone("GMT+8:00")
config 常用配置枚举
SerializationFeature
- WRITE_DATES_AS_TIMESTAMPS
- WRITE_DATE_KEYS_AS_TIMESTAMPS
- WRITE_DATES_WITH_ZONE_ID
- WRITE_DURATIONS_AS_TIMESTAMPS
- WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS
- WRITE_ENUMS_USING_TO_STRING
- WRITE_ENUMS_USING_INDEX
- WRITE_NULL_MAP_VALUES
- WRITE_EMPTY_JSON_ARRAYS
- WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED
- WRITE_BIGDECIMAL_AS_PLAIN
- WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS
MapperFeature
- USE_STATIC_TYPING
- USE_STD_BEAN_NAMING
DeserializationFeature
- USE_BIG_DECIMAL_FOR_FLOATS
- USE_BIG_INTEGER_FOR_INTS
- USE_LONG_FOR_INTS
- ACCEPT_SINGLE_VALUE_AS_ARRAY
- UNWRAP_SINGLE_VALUE_ARRAYS
- ACCEPT_EMPTY_STRING_AS_NULL_OBJECT
- ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT
- ACCEPT_FLOAT_AS_INT
- READ_ENUMS_USING_TO_STRING
- READ_UNKNOWN_ENUM_VALUES_AS_NULL
- READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE
- READ_DATE_TIMESTAMPS_AS_NANOSECONDS
- ADJUST_DATES_TO_CONTEXT_TIME_ZONE
常用配置解释
-
setVisibility 可以设置Key的方式
-
MapperFeature.USE_STD_BEAN_NAMING 直接输出原始的字段名。
/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.9.5/jackson-databind-2.9.5-sources.jar!/com/fasterxml/jackson/databind/util/BeanUtil.java
/**
* @since 2.5
*/
public static String okNameForMutator(AnnotatedMethod am, String prefix,
boolean stdNaming) {
String name = am.getName();
if (name.startsWith(prefix)) {
return stdNaming
? stdManglePropertyName(name, prefix.length())
: legacyManglePropertyName(name, prefix.length());
}
return null;
}
stdManglePropertyName 就是原始输出。
legacyManglePropertyName 就是规范输出。
![]() |
作者:NewSea 出处:http://newsea.cnblogs.com/
QQ,MSN:iamnewsea@hotmail.com 如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。 |
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
2017-09-25 Erlang笔记
2015-09-25 Java语法笔记
2014-09-25 未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.ServiceModel.Activation.HttpModule”。
2009-09-25 正则表达式的性能?!