BeWithYou

胡搞的技术博客

  1. 首页
  2. Java
  3. springboot使用fastjson统一序列化输出

springboot使用fastjson统一序列化输出


最近在用`spring boot`写接口,需要统一对外输出序列化后的json字符串。记录一下如何配置`fastjson`为默认序列化转换器,以及如何将`LocalDateTime`类型的null值转为""。 ```java @Configuration public class WebAppConfigurer implements WebMvcConfigurer { @Override public void configureMessageConverters(List> converters) { FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); // 指定时间格式化方法 fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, // 是否输出值为null的字段 SerializerFeature.WriteNullStringAsEmpty, // 字符类型字段如果为null,输出为”“,而非null SerializerFeature.DisableCircularReferenceDetect, // 消除对同一对象循环引用的问题 SerializerFeature.WriteNullListAsEmpty, // List字段如果为null,输出为[],而非null SerializerFeature.WriteDateUseDateFormat // 全局修改日期格式 ); // 可能的中文乱码 List fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes); fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); // 自定义ValueFilter 让LocalDateTime需要空字符串而不是null fastJsonConfig.setSerializeFilters( (ValueFilter) (Object bigObject, String name , Object thisObject) -> { try { if (thisObject == null && bigObject != null) { Class t = bigObject.getClass().getDeclaredField(name).getType(); // 利用反射判断类型 不能直接用instanceof if (Date.class.isAssignableFrom(t) || LocalDate.class.isAssignableFrom(t) || LocalDateTime.class.isAssignableFrom(t)) { return ""; } } } catch (Exception e) {} return thisObject; } ); //这里必须要指定index=0 巨坑 converters.add(0, fastJsonHttpMessageConverter); } } ```
回到顶部