配置FastJSON

导入依赖

1
2
3
4
5
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.33</version>
</dependency>

将fastJson转换器注入容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Configuration
public class IntercaptorConfig implements WebMvcConfigurer {

/**
* 使用@Bean注入fastJsonHttpMessageConvert
* @return
*/
@Bean
public HttpMessageConverter fastJsonHttpMessageConverters() {
//需要定义一个Convert转换消息的对象
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
// 添加fastjson的配置信息,比如 是否要格式化返回json数据
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
//解决long转换精度丢失等问题
SerializeConfig.globalInstance.put(Long.class, ToStringSerializer.instance);

fastJsonConfig.setSerializeConfig(SerializeConfig.globalInstance);
// 在convert中添加配置信息.
fastConverter.setFastJsonConfig(fastJsonConfig);

HttpMessageConverter<?> converter = fastConverter;
return converter;
}

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// 将convert添加到converters当中.
converters.add(fastJsonHttpMessageConverters());
}
}

如果对转换格式等不满意,可以在字段上加@JSONField

注解属性:

  • name 指定JSON序列化的字段名称
  • format 指定字段的格式,对日期格式有用
  • serialize 是否序列化
  • serializerFeature 通过SerializerFeature对生成的json格式的数据进行一些定制,比如可以输入的格式更好看,使用单引号而非双引号等,是使用SerializerFeature枚举中的指定序列化方式
  • parseFeatures 决定了解析器是否将自动关闭那些不属于parser自己的输入源 ,见Feature
  • label 给属性打上标签, 相当于给属性进行了分组
  • jsonDirect 你有⼀个字段是字符串类型,⾥⾯是json格式数据,你希望直接输⼊,⽽不是经过转义之后再输出 将这个值置为true。

SerializerFeature常用属性

属性名 含义
QuoteFieldNames 输出key时是否使用双引号,默认为true
UseSingleQuotes 使用单引号而不是双引号,默认为false
WriteMapNullValue 是否输出值为null的字段,默认为false
WriteNullListAsEmpty List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty 字符类型字段如果为null,输出为”“,而非null
WriteNullNumberAsZero 数值字段如果为null,输出为0,而非null
WriteNullBooleanAsFalse Boolean字段如果为null,输出为false,而非null
PrettyFormat 结果是否格式化,默认为false
WriteClassName 序列化时写入类型信息,默认为false。反序列化是需用到
BeanToArray 将对象转为array输出
DisableCheckSpecialChar 一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false