前面分析了springmvc对一些基本的请求参数的解析和绑定,接下来会进行分析springmvc对http请求消息体的解析。将会分析json、xml和mutipart(file)。
springmvc要解析绑定json数据,必须在handler的接收参数前添加@RequestBody注解,不然没法绑定参数:
首先来看supportsParameter():
再来看resolveArgument()方法:
来看看this.messageConverters是如何初始化的:
在RequestMappingHandlerAdapter里进行初始化:
要想在参数接收的地方将json直接转换成map或者实体类,则需要手动配置其他的MessageConverters,常用的是MappingJackson2HttpMessageConverter。
springmvc虽然提供了MappingJackson2HttpMessageConverter,但具体使用还需要引入第三方jar包:
在springmvc.xml里进行配置:
read()方法从http消息体里读取数据,转换成具体类型的参数。
StringHttpMessageConverter:
MappingJackson2HttpMessageConverter:
PS:这里应该是存在一个BUG,MappingJackson2HttpMessageConverter并不能转换任意类型的参数,比如如果参数类型为String,解析是会失败的。所以如果需要String类型也可以解析,则需要在springmvc.xml里同时配置StringHttpMessageConverter和MappingJackson2HttpMessageConverter,并且StringHttpMessageConverter要在MappingJackson2HttpMessageConverter前面,先判断StringHttpMessageConverter是否可以转换,如果不可以,再使用MappingJackson2HttpMessageConverter转换。
springmvc接收json类型的数据的大致流程就分析完了,主要是通过MessageConverter进行解析转换。