本文是读《Spring Boot2精髓-从构件小系统到架构分布式大系统》的读书笔记。
本章介绍 MVC 中的后端视图技术, 一种是后端模板引擎Beetl,用于渲染模板;另外一种
是 JSON 序列化技术 Jackson 。
Beetl这里不多写
对于 JSON 的序列化和反序列化技术,也有很多工具可以采用,如国内的 Fastjson , 国外的Jackson 、 Gson . Jackson 是 Spring Boot 内 置的,也是 Spring Boot 相关很多开源产品内置的序列化工具,与Beetl 一样,同样易使用、性能良好,堪称 JSON 首选工具 。
JSON技术
在 MVC 框架中, Spring Boot 内置了 Jackson 来完成 JSON 的序列化和反序列化操作 。 而且,在与其他技术集成的时候,比如 Redis 、 MongoDB 、 Elasticsearch 等对象序列化,默认都是使用 Jackson 来完成的,因此关于 JSON 技术,本书主要介绍 Jackson 工具 。国 内阿里巴巴提供的 Fastjson 也是个很好的工具 ,由于篇幅有限,这里不再介绍了 。
总的来说, JackSon 功能强大,既能满足简单的序列化和反序列化操作,也能实现复杂的、个性化的序列化和反序列化操作 。 到目前为止, Jackson 的序列化和反序列化性能都非常优秀,已经是国内外大部分 JSON 相关编程的首选工具 。
在Spring Boot中使用Jackson:
在 Controller 中,方法注解为@ResponseBody,则 自动将方法返回的对象序列化成 JSON 。
@Controller
@RequestMapping (” /json”)
public class BeetlController {
@Autowired UserService userService ;
@GetMapping (” luserl{id}.json”)
public @ResponseBody User showUserinfo( @PathVariable Long id) {
User user= userService.getUserByid(id) ;
return user;
}
}
自定义ObjectMapper:
如果想自定义一个 ObjectMapper 来代替默认的 , 可以使用 Java Config,使用@Bean 来配置一个 , 代码如下:
@Configuration
public class JacksonConf {
@Bean
public ObjectMapper getObjectMapper() {
ObjectMapper objectMapper =new ObjectMapper ();
objectMapper . setDateFormat (new SimpleDateFormat (” yyyy -刚-dd HH : mm : ss” ) ) ;
return objectMapper;
}
}
以上 Java Config 令 Spring Boot 使用自定义的 Jackson 来序列化而非默认配置的。以下是一个用来获取当前时间的请求 :
@GetMapping (” / now . json” )
public @ResponseBody Map datetime() {
Map map= new HashMap( );
map.put (” time ”, new Date( ) ) ;
return map ;
}
当用户访 问 now.json 的时候 , 会得到如下输出 :
{ ” time”:” 2017 - 04 - 12 22 : 52 : 05 ” }
Jackson的三种使用方式:
- 采用JsonParser来解析JSON
- 采用树遍历
- 采用DataBind方式,交POJO序列化成JSON,或者反序列化成POJO
对于应用程序来说,最常用的方式是 DataBind,也就是将 POJO 对象转化为 JSON 字符串,或者解析 JSON 宇符串并映射到 POJO 对象上 。 树遍历也是一种常用方式,特别是没有现成的POJO 做数据绑定的时候 , 可以遍历树来获取 JSON 数据 。
Jackson树遍历:
对象绑定:
流式操作:
Jackson注解:
Jackson 包含了很多注解 ,用来个性化序列化和反序列化操作
集合的反序列化:
在 Spring MVC 的 Controller 方法中, 可以使用@RequestBody 将提交的 JSON 自动映射到方法参数上, 比如 :