返回顶部
首页 > 资讯 > 精选 >如何在Spring Boot中自定义一个HTTP消息转换器
  • 259
分享到

如何在Spring Boot中自定义一个HTTP消息转换器

springboothttp 2023-05-30 20:05:55 259人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关如何在Spring Boot中自定义一个Http消息转换器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在构建RESTful数据服务过程中,我们定义了contro

这篇文章将为大家详细讲解有关如何在Spring Boot中自定义一个Http消息转换器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

在构建RESTful数据服务过程中,我们定义了controller、repositories,并用一些注解修饰它们,但是到现在为止我们还没执行过对象的转换——将java实体对象转换成HTTP的数据输出流。spring Boot底层通过HttpMessageConverters依靠Jackson库将Java实体类输出为JSON格式。当有多个转换器可用时,根据消息对象类型和需要的内容类型选择最适合的转换器使用。

springMVC源码剖析之消息转换器HttpMessageConverter一文中,有一张图可以很清楚得表示消息转换器的位置。

如何在Spring Boot中自定义一个HTTP消息转换器

消息转换器的位置

消息转换器的目标是:HTTP输入请求格式向Java对象的转换;Java对象向HTTP输出请求的转换。有的消息转换器只支持多个数据类型,有的只支持多个输出格式,还有的两者兼备。例如:MappingJackson2HttpMessageConverter可以将Java对象转换为application/json,而ProtobufHttpMessageConverter仅支持com.Google.protobuf.Message类型的输入,但是可以输出application/json、application/xml、text/plain和application/x-protobuf这么多格式。

How Do

项目中有三种办法配置消息转换器,主要区别是可定制性和易用度的衡量。

WEBConfiguration类中加入@Bean定义

@Beanpublic ByteArrayHttpMessageConverter byteArrayHttpMessageConverter() {  return new ByteArrayHttpMessageConverter();}

重写(override)configureMessageConverters方法,扩展现有的消息转换器链表

@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {  converters.add(new ByteArrayHttpMessageConverter());}

更多的控制,可以重写extendMessageConverters方法,首先清空转换器列表,再加入自定义的转换器。

@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {  converters.clear();  converters.add(new ByteArrayHttpMessageConverter());}

分析

Spring提供了多种方法完成同样的任务,选择哪个取决于我们更侧重便捷性还是更侧重可定制性。

上述提到的三种方法各有什么不同呢?

通过@Bean定义HttpMessageConverter是向项目中添加消息转换器最简便的办法,这类似于之前提到的添加Servlet Filters。如果Spring扫描到HttpMessageConverter类型的bean,就会将它自动添加到调用链中。推荐让项目中的WebConfiguration继承自WebmvcConfigurerAdapter。

通过重写configureMessageConverters方法添加自定义的转换器很方便,但有一个弱点:如果项目中存在多个WebMvcConfigurers的实例(我们自己定义的,或者Spring Boot默认提供的),不能确保重写后的configureMessageConverters方法按照固定顺序执行。

如果需要更精细的控制:清除其他消息转换器或者清楚重复的转换器,可以通过重写extendMessageConverters完成,仍然有这种可能:别的WebMvcConfigurer实例也可以重写这个方法,但是这种几率非常小。

关于如何在Spring Boot中自定义一个HTTP消息转换器就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何在Spring Boot中自定义一个HTTP消息转换器

本文链接: https://lsjlt.com/news/220761.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作