目录
2)对FastJsonHttpMessageConverter进行修改
说在前面
Fastjson是一个Java库,可用于将Java对象转换为其JSON表示。它还可用于将JSON字符串转换为等效的Java对象。Fastjson可以处理任意Java对象,包括您没有源代码的预先存在的对象。
Fastjson目标
- 在服务器端和Android客户端提供最佳性能
- 提供简单的toJSONString()和parseObject()方法,将Java对象转换为JSON,反之亦然
- 允许将预先存在的不可修改对象转换为JSON和从JSON转换
- 广泛支持Java Generics
- 允许对象的自定义表示
- 支持任意复杂的对象(具有深层继承层次结构和泛型类型的广泛使用)
在pom.xml加入相关依赖
整合 Fastjson
配置管理类WebMvcConfigurer
编程式配置
如果是使用编程的方式(通常是基于 Spring Boot 项目)配置 Spring MVC 的话只需继承 WebMvcConfigurerAdapter
覆写 configureMessageConverters
方法即可,就像下面这样。
注:如果你使用的 Fastjson 版本小于1.2.36
的话(强烈建议使用最新版本),在与Spring MVC 4.X 版本集成时需使用 FastJsonHttpMessageConverter4
。
注2:SpringBoot 2.0.1版本中加载WebMvcConfigurer
的顺序发生了变动,故需使用converters.add(0, converter);
指定FastJsonHttpMessageConverter
在converters内的顺序,否则在SpringBoot 2.0.1及之后的版本中将优先使用Jackson处理。详情:WebMvcConfigurer is overridden by WebMvcAutoConfiguration #12389
参考:Spring Framework 官方文档 Message Converters 部分, 点我查看。
实体类Customer
此处采用 lombok 方式,@Data注解:注解在类上使用,提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
控制器类IndexController
务必 加上 @ResponseBody,亦或者直接在 Controller 上采用 @RestController注解
@ResponseBody
@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。
作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
页面访问
在浏览器直接输入:http://localhost:8080/index/helloFastJson
注
其中处理编码问题这里提供两种方式
默认如果不处理,会显示:
1)对FastJsonConfig进行修改
看一下源代码,默认为 UTF-8:
在配置管理类中WebMvcConfig中configureMessageConverters方法 配置 FastJsonConfig
此时返回页面json中 中文依然存在乱码,需要配置 application.properties
把 spring.http.encoding.force 改为 true
可以看到他的源码是 Boolean,也就是默认值为 false,所以打开这个就ok了。
2)对FastJsonHttpMessageConverter进行修改
两种方式处理完,处理结果为:
当然,个人建议采用一种,只需要修改application.properties配置即可,因为默认就是UTF-8。
其中处理日期(时间)问题这里提供两种方式
默认如果不处理,会显示:
1)对FastJsonConfig进行修改
结果为:
2)对Customer实体类进行修改
这里采用注解形式
结果为:
同样,根据需求不同选择不同,第一种是全局,第二种为单独处理。
当然,如果同时写入,FastJsonConfig > @JSONField
至此为止,SpringBoot集成FastJson就算完成了。
总结
如果你使用 Spring MVC 来构建 Web 应用并对性能有较高的要求的话,可以使用 Fastjson 提供的FastJsonHttpMessageConverter
来替换 Spring MVC 默认的 HttpMessageConverter
以提高 @RestController @ResponseBody @RequestBody
注解的 JSON序列化速度。下面是配置方式,非常简单。
源码下载
[相关示例完整代码]请获取 相关分支哦:feature-20180910-web