百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

SpringBoot 中 Json 格式化配置

ztj100 2025-01-06 16:31 28 浏览 0 评论

SpringBoot 针对 jackson 是自动化配置的,如果需要修改,也可以自定义配置。


0x01:通过 application.yml

配置属性说明:

spring.jackson.date-format 指定日期格式,比如 yyyy-MM-dd HH:mm:ss,或者具体的格式化类的全限定名。

spring.jackson.deserialization 是否开启 Jackson 的反序列化。

spring.jackson.generator 是否开启 json 的 generators。

spring.jackson.joda-date-time-format 指定 Joda date/time 的格式,比如 (yyyy-MM-dd HH:mm:ss)。如果没有配置的话,dateformat 会作为 backup。

spring.jackson.locale 指定 json 使用的 Locale。

spring.jackson.mapper 是否开启 Jackson 通用的特性。

spring.jackson.parser 是否开启 jackson 的 parser 特性。

spring.jackson.property-naming-strategy指定 PropertyNamingStrategy(CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES) 或者指定 PropertyNamingStrategy 子类的全限定类名。

spring.jackson.serialization 是否开启 jackson 的序列化。

spring.jackson.serialization-inclusion 指定序列化时属性的 inclusion 方式,具体查看 JsonInclude.Include 枚举。

spring.jackson.time-zone 指定日期格式化时区,比如 America/Los_Angeles 或者 GMT+10。

spring:
  jackson:
  #日期格式化
    date-format: yyyy-MM-dd HH:mm:ss
  serialization:
    #格式化输出 
     indent_output: true
     #忽略无法转换的对象
     fail_on_empty_beans: false
      #设置空如何序列化
     defaultPropertyInclusion: NON_EMPTY
  deserialization:
      #允许对象忽略json中不存在的属性
      fail_on_unknown_properties: false
  parser:
       #允许出现特殊字符和转义符
       allow_unquoted_control_chars: true
        #允许出现单引号
        allow_single_quotes: true


0x02 使用重新注入 ObjectMapper

在配置 bean 中使用下面的配置

@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder)
{
ObjectMapper objectMapper = builder.createXmlMapper(false).build();

// 通过该方法对mapper对象进行设置,所有序列化的对象都将该规则进行序列化
// Include.Include.ALWAYS 默认
// Include.NON_DEFAULT 属性为默认值不序列化
// Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量
// Include.NON_NULL 属性为NULL 不序列化

objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 允许出现特殊字符和转义符
objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
// 允许出现单引号
objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
// 字段保留,将null值转为""
objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>()
{
@Override
public void serialize(Object o, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider)
throws IOException{
jsonGenerator.writeString("");
}
});
return objectMapper;
}


另外,如果没有进行全局配置。后台编写的接口向前端返回数据时,如果返回的是某个数据库对应的实体类,有可能出现日期类型数据不是 yyyy-MM-dd HH:mm:ss 格式。SpringBoot 提供了 @JsonFormat 注解就可以适用于这种情况。使用方式:加在实体类属上添加该注解

/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(value = "create_date")
private Date createDate;

类似功能的注解还有 @DateTimeFormat。

相关推荐

如何将数据仓库迁移到阿里云 AnalyticDB for PostgreSQL

阿里云AnalyticDBforPostgreSQL(以下简称ADBPG,即原HybridDBforPostgreSQL)为基于PostgreSQL内核的MPP架构的实时数据仓库服务,可以...

Python数据分析:探索性分析

写在前面如果你忘记了前面的文章,可以看看加深印象:Python数据处理...

CSP-J/S冲奖第21天:插入排序

...

C++基础语法梳理:算法丨十大排序算法(二)

本期是C++基础语法分享的第十六节,今天给大家来梳理一下十大排序算法后五个!归并排序...

C 语言的标准库有哪些

C语言的标准库并不是一个单一的实体,而是由一系列头文件(headerfiles)组成的集合。每个头文件声明了一组相关的函数、宏、类型和常量。程序员通过在代码中使用#include<...

[深度学习] ncnn安装和调用基础教程

1介绍ncnn是腾讯开发的一个为手机端极致优化的高性能神经网络前向计算框架,无第三方依赖,跨平台,但是通常都需要protobuf和opencv。ncnn目前已在腾讯多款应用中使用,如QQ,Qzon...

用rust实现经典的冒泡排序和快速排序

1.假设待排序数组如下letmutarr=[5,3,8,4,2,7,1];...

ncnn+PPYOLOv2首次结合!全网最详细代码解读来了

编辑:好困LRS【新智元导读】今天给大家安利一个宝藏仓库miemiedetection,该仓库集合了PPYOLO、PPYOLOv2、PPYOLOE三个算法pytorch实现三合一,其中的PPYOL...

C++特性使用建议

1.引用参数使用引用替代指针且所有不变的引用参数必须加上const。在C语言中,如果函数需要修改变量的值,参数必须为指针,如...

Qt4/5升级到Qt6吐血经验总结V202308

00:直观总结增加了很多轮子,同时原有模块拆分的也更细致,估计为了方便拓展个管理。把一些过度封装的东西移除了(比如同样的功能有多个函数),保证了只有一个函数执行该功能。把一些Qt5中兼容Qt4的方法废...

到底什么是C++11新特性,请看下文

C++11是一个比较大的更新,引入了很多新特性,以下是对这些特性的详细解释,帮助您快速理解C++11的内容1.自动类型推导(auto和decltype)...

掌握C++11这些特性,代码简洁性、安全性和性能轻松跃升!

C++11(又称C++0x)是C++编程语言的一次重大更新,引入了许多新特性,显著提升了代码简洁性、安全性和性能。以下是主要特性的分类介绍及示例:一、核心语言特性1.自动类型推导(auto)编译器自...

经典算法——凸包算法

凸包算法(ConvexHull)一、概念与问题描述凸包是指在平面上给定一组点,找到包含这些点的最小面积或最小周长的凸多边形。这个多边形没有任何内凹部分,即从一个多边形内的任意一点画一条线到多边形边界...

一起学习c++11——c++11中的新增的容器

c++11新增的容器1:array当时的初衷是希望提供一个在栈上分配的,定长数组,而且可以使用stl中的模板算法。array的用法如下:#include<string>#includ...

C++ 编程中的一些最佳实践

1.遵循代码简洁原则尽量避免冗余代码,通过模块化设计、清晰的命名和良好的结构,让代码更易于阅读和维护...

取消回复欢迎 发表评论: