FastJson

default

引入依赖

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

配置

全局转换器配置

 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
/**
 * FastJson 全局转换器
 */
@Configuration
public class LocalDateTimeSerializerConfig extends WebMvcConfigurationSupport {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
        // 清除默认json转换器
        converters.removeIf(converter -> converter instanceof MappingJackson2HttpMessageConverter);

        FastJsonHttpMessageConverter httpMessageConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig config = new FastJsonConfig();
        SerializeConfig serializeConfig = SerializeConfig.getGlobalInstance();
        // 格式化LocalDateTime日期类型,自定义格式转换
        serializeConfig.put(LocalDateTime.class, LocalDateTimeSerializer.instance);
        // Long类型转化为String,解决丢失精度问题
        serializeConfig.put(Long.class, ToStringSerializer.instance);
        serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
        config.setSerializeConfig(serializeConfig);
        config.setSerializerFeatures(SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.DisableCircularReferenceDetect);
        httpMessageConverter.setFastJsonConfig(config);
        converters.add(httpMessageConverter);
    }
}

其中,自定义序列化器如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * 自定义LocalDateTime类型格式转换器
 */
@Component
public class LocalDateTimeSerializer implements ObjectSerializer {

    public static final LocalDateTimeSerializer instance = new LocalDateTimeSerializer();

    private static final String pattern = "yyyy-MM-dd HH:mm:ss";


    @Override
    public void write(JSONSerializer jsonSerializer, Object o, Object fieldName, Type fieldType, int features) throws IOException {
        SerializeWriter out = jsonSerializer.out;
        if (o == null) {
            out.writeNull();
        } else {
            LocalDateTime time = (LocalDateTime) o;
            out.writeString(time.format(DateTimeFormatter.ofPattern(pattern)));
        }
    }
}

常见注解的使用

Gear(夕照)的博客。记录开发、生活,以及一些不足为道的思考……