背景
现在阿里提供的fastjson 以简单、方便、高效的 一个高效的json框架,而且在业界的使用率也非常的广泛。现在spring 的项目好多的json 转换 还是原始的json 不好理解,学习成本高。使用不够方便,也不够高效。需要fastjson 替代原有的json转换。
对fastjson还有不是很了解的同学可以上网看一下 这个中文 api https://www.w3cschool.cn/fastjson/fastjson-api.html
注意要点:这个整合必须是在spring 4.2版本之上。spring boot 的版本 必须在1.2.0以上。请注意版本选择
spring boot 整合使用fastjson 俩种方式
第一种方式 覆盖 WebMvcConfigurerAdapter 类中的configureMessageConverters方法 可以看
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Autowired private JwtInterceptor jwtInterceptor; /** * 设置资源文件路径 * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/"); } /** * * APP接口拦截器 * */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(jwtInterceptor).addPathPatterns("/*"); } /** * 生成json时,将所有Long转换成String * @param converters */ @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper(); //生成json时,将所有Long转换成String SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); objectMapper.registerModule(simpleModule); jackson2HttpMessageConverter.setObjectMapper(objectMapper); converters.add(0, jackson2HttpMessageConverter); } /** * spring boot 使用fastjson 作为json转换 * @param converters */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { super.configureMessageConverters( converters ); //创建fastjson 转换器 FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); //创建fastjson 配置类选择格式化方式 FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures( SerializerFeature.PrettyFormat ); fastJsonHttpMessageConverter.setFastJsonConfig( fastJsonConfig ); converters.add( fastJsonHttpMessageConverter ); } }
第二种方式 通过spring的 bean 注入方式 俩种方式的内部代码基本一致。
/** * 与上面方法是等效的作用。次方法通过bean的注入 * @return */ @Bean public HttpMessageConverters fastJsonHttpMessageConverters(){ FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures( SerializerFeature.PrettyFormat ); fastJsonHttpMessageConverter.setFastJsonConfig( fastJsonConfig ); HttpMessageConverter<?> a = fastJsonHttpMessageConverter; return new HttpMessageConverters(a); }
可以根据fastJsonConfig.setSerializerFeatures( SerializerFeature.PrettyFormat )选择需要的格式化方式
更多的fastjson 请参照API
名称 | 含义 | 备注 |
---|---|---|
QuoteFieldNames | 输出key时是否使用双引号,默认为true | |
UseSingleQuotes | 使用单引号而不是双引号,默认为false | |
WriteMapNullValue | 是否输出值为null的字段,默认为false | |
WriteEnumUsingToString | Enum输出name()或者original,默认为false | |
UseISO8601DateFormat | Date使用ISO8601格式输出,默认为false | |
WriteNullListAsEmpty | List字段如果为null,输出为[],而非null | |
WriteNullStringAsEmpty | 字符类型字段如果为null,输出为”“,而非null | |
WriteNullNumberAsZero | 数值字段如果为null,输出为0,而非null | |
WriteNullBooleanAsFalse | Boolean字段如果为null,输出为false,而非null | |
SkipTransientField | 如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true | |
SortField | 按字段名称排序后输出。默认为false | |
WriteTabAsSpecial | 把\t做转义输出,默认为false | 不推荐 |
PrettyFormat | 结果是否格式化,默认为false | |
WriteClassName | 序列化时写入类型信息,默认为false。反序列化是需用到 | |
DisableCircularReferenceDetect | 消除对同一对象循环引用的问题,默认为false | |
WriteSlashAsSpecial | 对斜杠’/’进行转义 | |
BrowserCompatible | 将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false | |
WriteDateUseDateFormat | 全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat); | |
DisableCheckSpecialChar | 一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false | |
NotWriteRootClassName | 含义 | |
BeanToArray | 将对象转为array输出 | |
WriteNonStringKeyAsString | 含义 | |
NotWriteDefaultValue | 含义 | |
BrowserSecure | 含义 | |
IgnoreNonFieldGetter | 含义 | |
WriteEnumUsingName | 含义 |