Spring框架5的spring-web模块中的Java对象与HTTP消息之间的数据转换器一览

Spring Framework 5.0.7.RELEASE版本中的spring-web模块,提供org.springframework.http.converter包,提供了一系列的Java对象与HTTP消息之间的数据转换器。其中,最基本的是org.springframework.http.converter.HttpMessageConverter接口,是所有具体数据转换器实现的基本接口。
通过这些数据转换器,Spring框架支持如下的各种HTTP请求/响应消息格式:

  • CBOR
  • Atom, RSS
  • JSON
  • Google Protocol Buffers
  • XML

下面重点介绍JSON格式的HTTP请求/响应消息与Java对象之间的转换。

1. Jackson2 (默认)

事实上,即使对于开发人员来说,这种转换过程也几乎是自动完成的,默认无需进行任何设置

这是因为,作为Spring应用,其中一家默认包含了Jackson2用以操作JSON格式的数据。只要你的HTTP请求/响应消息具有如下特性,Spring框架就会推测出HTTP消息采用了JSON格式,从而自动在Java对象与JSON消息之间进行转换,从而免去了开发人员的操作JSON消息赋值给model对象之苦:

  • MediaType为application/json或application/*+json
  • Charset为UTF-8

这种自动的转换是通过org.springframework.http.converter.json.MappingJackson2HttpMessageConverter类完成的。
此外,Jackson2还可以操作其他格式的数据,Spring框架中海提供了类似的数据转换器:

  • MappingJackson2CborHttpMessageConverter
  • MappingJackson2SmileHttpMessageConverter
  • MappingJackson2XmlHttpMessageConverter

2. GSON

我们知道,除了Jackson2,能够操作JSON格式数据的还有GSON。对于习惯GSON的开发人员,Spring框架中还提供了GSON的JSON消息转换器,但需要开发人员指定使用org.springframework.http.converter.json.GsonHttpMessageConverter类。其使用的条件与Jackson2类似,也要求HTTP请求/响应消息如下:

  • MediaType为application/json或application/*+json
  • Charset为UTF-8
GsonHttpMessageConverter gsonConverter = new GsonHttpMessageConverter();
...
gsonConverter.setSupportedMediaTypes(myMediaTypeList);
gsonConverter.setDefaultCharset(Charset.defaultCharset());
...
restTemplate.setMessageConverters(List.of(gsonConverter));

3. JavaEE 8的JSON Binding API

最后,Spring框架中还提供了采用JSON Binding的JSON消息转换器,其实现是通过org.springframework.http.converter.json.JsonbHttpMessageConverter类。

 

参考链接:

https://docs.spring.io/spring/docs/5.0.x/javadoc-api/org/springframework/http/converter/json/MappingJackson2HttpMessageConverter.html

https://github.com/spring-projects/spring-framework/blob/v5.0.7.RELEASE/spring-web/src/main/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverter.java

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值