专栏首页只喝牛奶的杀手HttpMessageConverter的作用

HttpMessageConverter的作用

在SpringMVC或者SpringBoot的使用时,定义接口往往会用到RequestParam和RequestBody及ResponseBody这三个注解,RequestParam明确地告诉controller,这参数是从请求参数中获取。尤其POST请求要使用后两个的注解,对应着Controller方法的参数解析和返回值处理。在这里先不说RequestParam,因为对RequestParam的处理可以通过继承HttpServletRequestWrapper去做全局处理。

SpringMVC处理请求和响应时,支持多种类型的请求参数和返回类型,而此种功能的实现就需要对HTTP消息体和参数及返回值进行转换,为此SpringMVC提供了大量的转换类,所有转换类都实现了HttpMessageConverter接口。

参数解析器和返回值处理器在底层处理时,都是通过HttpMessageConverter进行转换。流程如下:

HttpMessageConverter我们常用的一般是Json和Xml,但是ProtoBuf变的越来越流行起来。Xml面向过去,Json面向现在,ProtoBuf面向未来。至于每个Converter是干嘛的这里就不解释了。

HttpMessageConverter只处理POST过来的RequestBody对象,比如List<T>,T等。我们一般会在序列化和反序列化的时候统一去处理对象中的Key的类型转换及value的处理。

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
      MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
      ObjectMapper objectMapper = new ObjectMapper();
      objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
      SimpleModule simpleModule = new SimpleModule();
      simpleModule.addSerializer();//序列化
      simpleModule.addDeserializer();//反序列化
      objectMapper.registerModule(simpleModule);
      jackson2HttpMessageConverter.setObjectMapper(objectMapper);
      converters.add(jackson2HttpMessageConverter);
 }

SpringMVC 默认的解析工具Jackson。SpringBoot默认自带是jackson,网上有很多json转换速率的比对,但是Jackson已经够用了。

本文分享自微信公众号 - 只喝牛奶的杀手(killerhub),作者:只喝牛奶的杀手

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring AOP切面表达式详解

    在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点"

    只喝牛奶的杀手
  • MySQL分区表

    随着业务的发展,当然现在比较流行的微服务无非就是业务垂直拆分+功能水平拆分,应用加节点是比较简单的,但是每个业务的单库单表扛不住了;数据库分库分表相对来说更复杂...

    只喝牛奶的杀手
  • 断路器模式

    连接到远程服务或资源时处理故障,此类故障所需恢复时间不定。 这可以提高应用程序的稳定性和复原能力。

    只喝牛奶的杀手
  • Spring boot +mybatis plus输出sql日志的两种方式

    用户4143945
  • 基于dba_hist_sqlstat查看sql语句的性能历史(r4笔记第92天)

    在生产环境中,如果系统已经稳定,调优的空间就会越来越小,但是不代表没有调优的余地,可能工作的重心就会更加求稳,sql调优就是一项不间断的工作,很多工作还是需要前...

    jeanron100
  • 处理SSL certificate problem self signed certificate

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • JS中函数的两种定义方法

    请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。

    acoolgiser
  • 震惊了!每30秒学会一个Python小技巧

    向大家推荐一个将碎片化时间利用到极致的github项目《30-seconds-of-python》

    统计学家
  • numpy.squeeze()

    这是因为matplotlib.pyplot接收的color sequence 参数c应该是单个值,直接传Y或者Y.train传的是shape(1, size)的...

    Steve Wang
  • linux curl 测试域名劫持

    -v 参数可以显示一次 http 通信的整个过程,包括端口连接和 http request 头信息。

    葫芦

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动