SpringMVC消息转换器 自定义消息转换器

所谓消息转换器,通俗来说将晦涩的消息转换成通俗易懂的消息。
  对于java来说,通俗易懂的消息肯定是对象了。
  
  对于请求和响应都有对应的body,这个body就是我们关注的消息。
  请求时一般请求体为一段字符串,参数一般在url中,对于表单可以放在请求体中,也可以放在url中,总之可以将请求体看做客户端请求后台所带的字符串。
响应体则是渲染页面的依据,对于html页面,一般来说都是html的源代码。(servlet解析后的数据)
请求体和响应体都是需要有所谓的标识(Content-Type),这个标识就是告诉代码,我是一个什么格式(text,json,html等),通过这个标识,服务端可以知道请求发过来的数据是什么样的格式,需要进行什么样的格式化来更好的处理数据,客户端根据这个标识知道去渲染什么样的页面(响应结果),是直接返回数据(json),还是渲染页面(html)等。
  还有就是Accept,这个标识的意义是客户端期望得到什么格式的响应体,服务器可以根据此字段选择合适的结果进行表述。
SpringMVC消息转换器 自定义消息转换器
  SpringMVC 提供了9个自带的消息转换器,对于消息转换器的调用,都是在RequestResponseBodyMethodProcessor类中完成的。它实现了HandlerMethodArgumentResolver和HandlerMethodReturnValueHandler两个接口,分别实现了处理参数和处理返回值的方法。
  需要使用这些自带的消息转换器-,需要再特定的位置添加RequestBody和ResponseBody,并且这些自带的消息转换器是一个有序的List集合,是有优先级的,而且JSON格式是优先于XML的。
SpringMVC消息转换器 自定义消息转换器

SpringMVC消息转换器 自定义消息转换器
HttpMessageConverter中的canRead(),read(),canWrite(),write()都是成对出现的,MediaType是对属性或者说类型的封装。

SpringMVC消息转换器 自定义消息转换器

SpringMVC消息转换器 自定义消息转换器
  在SpringMVC进入save方法之前,会根据RequestBody的注解选用合适的参数解析到JsonObject中,他的canRead()方法返回true,然后它的read()方法会从请求中读出参数,绑定到save()中的JsonObject对象中。
  当响应时,根据ResponseBody的注释,将write()方法,当canwrite()方法返回值为true,将结果作为JsonObject写入响应报文。
  这个过程用的流程很简单。

SpringMVC消息转换器 自定义消息转换器

自定义消息转换器

SpringMVC消息转换器 自定义消息转换器
Spring 的配置
SpringMVC消息转换器 自定义消息转换器
页面的配置
SpringMVC消息转换器 自定义消息转换器
后台的写法
SpringMVC消息转换器 自定义消息转换器