SpringMVC中是如何解析http消息和如何确定该返回哪种对应的消息类型的

本文探讨了SpringMVC如何通过HttpMessageConverter处理不同类型的http消息,解析前端传递的数据,并确定响应时的数据格式。利用@RequestParam、@RequestBody等注解接收参数,通过Content-Type和Accept头选择合适的转换器,如MappingJackson2HttpMessageConverter处理JSON。SpringMVC允许自定义消息转换器,通过WebMvcConfigurer接口的配置方法实现转换器的覆盖或扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        我们知道前端传递过来的http消息,不管content-type类型是application/json、application/x-xxx-form-urllencoded,或者直接是通过url传参等等。使用springmvc,在后台可以通过@RequestParam、@RequestBody等等一些列方式来接收参数,也可以通过一些特定的注解在响应时将对象转为指定的content-type类型的数据。但是这些http消息和java格式的数据间的互转工作,是由什么来完成这项工作的呢?

        主要是通过SpringMVC提供的消息转换器来完成这项工作的。通过HttpMessageConverter实现将http消息转为对象绑定到这些方法(Controller中请求的方法)的参数上,从这些方法返回的对象转换为HTTP消息。当用户发送请求后,@RequestBody注解会读取请求body中的数据,通过获取请求头Header中的Content-Type来确认请求头的数据格式,从而来为请求数据适配合适的转换器。例如contentType:applicatin/json,那么转换器会适配MappingJackson2HttpMessageConverter。响应时候的时候同理,@ResponseBody注解会通过检测请求头Header中Accept属性来适配对应响应的转换器。

       默认情况下会自动注册这些MIME类型的转换器(Spring Framework Reference Documentation),但你也可以覆盖默认值并通过messageConverters() bean属性注册自定义转换器。默认转换器ByteArrayHttpMessageConverter, StringHttpMessageConverter、ResourceHttpMessageConverter、SourceHttpMessageConverter、AllEncompassingFormHttpMessageConverter(它的作用是,从类加载器去查找相关的类,只有这些转换器需要的类(jar包被你引入了)存在,那么转换器才会被加载进去,比如在类路径上存在了jackson,MappingJackson2HttpMessageConverter转换器就会被用于@RequestBody和@ResponseBody)

MappingJackson2HttpMessageConverter:

        一个可以使用Jackson的objectapper读写JSON的HttpMessageConverter实现。通过使用Jackson提供的注释,可以根据需要定制JSON映射。当需要进一步控制时,可以通过objectapper属性注入自定义objectapper(也就是说可以自定义一个ObjectMapper,如图-自定义ObjectMapper所示),以应对需要为特定类型提供自定义JSON序列化器/反序列化器的情况。默认情况下,这个转换器支持(application/json)。

如何自定义消息转换器

        SprignBoot中需要实现WebMvcConfigurer重写configureMessageConverters方法或者extendMessageConverters方法。

原创不易,转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值