SpringBoot中使用Fastjson/Jackson对JSON序列化格式化输出的若干问题
Use-Fastjson-and-Jackson-to-Serialized-and-Formated-Output-of-JSON-in-SpringBoot
之前使用springboot-web编写rest接口,接口需要返回json数据,自己是个强迫症患者,看着默认输出的json字符串挤在一起,看着就难受,所以总想着把输出的json数据经过格式化处理后再输出。 目前国内比较常用的fastjson使用比较方便,但是SpringBoot默认使用的Jackson,替换的时候有时候因为其他组件也使用到了jackson,所以无法100%成功替换。 不喜欢使用jackson主要是jackson对格式化输出支持不太友好,自己使用的时候遇到许多坑,至今也没把坑填好,所以一直就不待见它,有时候又不得不用。 下面总结一下Fastjson/Jackson两种对json序列化+格式化输出的配置总结。
1.Jackson方式(SpringBoot中的默认方式):
1.1application.yml配置文件
spring:
jackson:
#日期格式化
date-format: yyyy-MM-dd HH:mm:ss
serialization:
#格式化输出
indent_output: true
- 网上提供的方案,可是实际配置并不能生效
1.2使用JavaConfig文件配置Jackson格式化输出
@Configuration
public class JacksonConfig extends WebMvcConfigurationSupport {
// 注释部分配置无效
// @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.setSerializationInclusion( JsonInclude.Include.ALWAYS );
// 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,
//