本文主要是介绍springmvc的RequestResponseBodyMethodProcessor解析_晏无心_新浪博客,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前面分析了springmvc对一些基本的请求参数的解析和绑定,接下来会进行分析springmvc对http请求消息体的解析。将会分析json、xml和mutipart(file)。
POST请求,contentType为Json,消息体为json数据。
supportsParameter()方法比较简单,只支持添加了@RequestBody注解的参数。
可以看出,参数的具体解析是通过MessageConverters进行的。
所以,如果不手动对MessageConverters进行配置,默认是可以支持String类型的参数转换的:
这里接收到的就是json格式字符串。
这三个jar必须都引入,不然会出现异常。
这样,handler的参数类型为map和实体类时,都可以正常对json格式的数据进行解析:
MessageConverters可以配置多个,来简单看下:
MessageConverters都是实现了这个接口。
canRead()方法判断当前MessageConverter是否可以对参数进行转换。
StringHttpMessageConverter可以支持参数类型为String的。
MappingJackson2HttpMessageConverter可以解析http请求contentType为json的,至于handler的参数类型,则没有限制。
POST请求,contentType为Json,消息体为json数据。
springmvc要解析绑定json数据,必须在handler的接收参数前添加@RequestBody注解,不然没法绑定参数:
首先来看supportsParameter():
supportsParameter()方法比较简单,只支持添加了@RequestBody注解的参数。
再来看resolveArgument()方法:
可以看出,参数的具体解析是通过MessageConverters进行的。
来看看this.messageConverters是如何初始化的:
在RequestMappingHandlerAdapter里进行初始化:
所以,如果不手动对MessageConverters进行配置,默认是可以支持String类型的参数转换的:
这里接收到的就是json格式字符串。
要想在参数接收的地方将json直接转换成map或者实体类,则需要手动配置其他的MessageConverters,常用的是MappingJackson2HttpMessageConverter。
springmvc虽然提供了MappingJackson2HttpMessageConverter,但具体使用还需要引入第三方jar包:
这三个jar必须都引入,不然会出现异常。
在springmvc.xml里进行配置:
这样,handler的参数类型为map和实体类时,都可以正常对json格式的数据进行解析:
MessageConverters可以配置多个,来简单看下:
MessageConverters都是实现了这个接口。
canRead()方法判断当前MessageConverter是否可以对参数进行转换。
read()方法从http消息体里读取数据,转换成具体类型的参数。
StringHttpMessageConverter:
StringHttpMessageConverter可以支持参数类型为String的。
MappingJackson2HttpMessageConverter:
MappingJackson2HttpMessageConverter可以解析http请求contentType为json的,至于handler的参数类型,则没有限制。
PS:这里应该是存在一个BUG,MappingJackson2HttpMessageConverter并不能转换任意类型的参数,比如如果参数类型为String,解析是会失败的。所以如果需要String类型也可以解析,则需要在springmvc.xml里同时配置StringHttpMessageConverter和MappingJackson2HttpMessageConverter,并且StringHttpMessageConverter要在MappingJackson2HttpMessageConverter前面,先判断StringHttpMessageConverter是否可以转换,如果不可以,再使用MappingJackson2HttpMessageConverter转换。
springmvc接收json类型的数据的大致流程就分析完了,主要是通过MessageConverter进行解析转换。
这篇关于springmvc的RequestResponseBodyMethodProcessor解析_晏无心_新浪博客的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!