3.视图技术

本文是读《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的三种使用方式

  1. 采用JsonParser来解析JSON
  2. 采用树遍历
  3. 采用DataBind方式,交POJO序列化成JSON,或者反序列化成POJO

对于应用程序来说,最常用的方式是 DataBind,也就是将 POJO 对象转化为 JSON 字符串,或者解析 JSON 宇符串并映射到 POJO 对象上 。 树遍历也是一种常用方式,特别是没有现成的POJO 做数据绑定的时候 , 可以遍历树来获取 JSON 数据 。

Jackson树遍历

对象绑定

流式操作

Jackson注解
Jackson 包含了很多注解 ,用来个性化序列化和反序列化操作

集合的反序列化
在 Spring MVC 的 Controller 方法中, 可以使用@RequestBody 将提交的 JSON 自动映射到方法参数上, 比如 :

MVC分离开发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值