SpringMVC(十四)_处理 JSON:使用 HttpMessageConverter

       前言:本篇主要介绍SpringMVC如何处理Json数据,包括接收和响应json数据

本篇文章重点关注以下问题:

  • 处理json数据示例
  • 关注HttpMessageConverter<T>

1. 处理Json数据的样例

         SpringMVC处理Json数据的步骤可以说是简单到没朋友,总共三步

1. 加入 jar 包(开发过程中,这一步也就无需考虑了):

2. 编写目标方法,使其返回 JSON 对应的对象或集合;

3. 在方法上添加 @ResponseBody 注解;

 

     返回可以是个Map集合,也可是key-value形式的List集合以返回json数组

@RequestMapping("dataBinder/getCmpVo.action")
@ResponseBody
public Map<String, Object> getCmpVo(UserVo user){
    System.out.println("【自定义复合类型】" + user);
        
    Map<String, Object> map = new HashMap<>();
    map.put("user", user);
    return map;
}

       完成上述三个步骤,SpringMVC就可以自动给前台响应json数据,是不是相当简单。

 

2. 聊聊HttpMessageConverter<T>

        HttpMessageConverter<T> 是Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息。

       HttpMessageConverter<T>接口定义的方法有:

  • Boolean canRead(Class<?> clazz,MediaType – mediaType): 指定转换器可以读取的对象类型,即转换器是否可将请求信息转换为 clazz 类型的对象,同时指定支持 MIME 类型(text/html,applaiction/json等);
  • Boolean canWrite(Class<?> clazz,MediaType mediaType):指定转换器是否可将clazz 类型的对象写到响应流中,响应流支持的媒体类型在MediaType 中定义。
  • LIst<MediaType> getSupportMediaTypes():该转换器支持的媒体类型。
  • T read(Class<? extends T> clazz,HttpInputMessage inputMessage– ):将请求信息流转换为 T 类型的对象。
  • void write(T t,MediaType contnetType,HttpOutputMessgae outputMessage):将T类型的对象写到响应流中,同时指定相应的媒体类型为contentType。

       其工作流程如下:

 

2.1 SpringMVC内置HttpMessageConverter实现类

名称 作用 读支持 MediaType 写支持 MediaType
ByteArrayHttpMessageConverter 数据与字节数组的相互转换 \/\ application/octet-stream
StringHttpMessageConverter 数据与 String 类型的相互转换 text/\* text/plain
FormHttpMessageConverter 表单与 MultiValueMap的相互转换 application/x-www-form-urlencoded application/x-www-form-urlencoded
SourceHttpMessageConverter 数据与 javax.xml.transform.Source 的相互转换 text/xml 和 application/xml text/xml 和 application/xml
MarshallingHttpMessageConverter 使用 Spring 的 Marshaller/Unmarshaller 转换 XML 数据 text/xml 和 application/xml text/xml 和 application/xml
MappingJackson2HttpMessageConverter 使用 Jackson 的 ObjectMapper 转换 Json 数据 application/json application/json
MappingJackson2XmlHttpMessageConverter 使用 Jackson 的 XmlMapper 转换 XML 数据 application/xml application/xml
BufferedImageHttpMessageConverter 数据与 java.awt.image.BufferedImage 的相互转换 Java I/O API 支持的所有类型 Java I/O API 支持的所有类型

 

2.2 使用HttpMessageConverter

       HttpMessageConverter<T> 将请求信息转化并绑定到处理方法的入参中

  • 使用 @RequestBody对处理方法进行标注;
  • 使用HttpEntity<T>作为处理方法的入参;

       HttpMessageConverter<T>将响应结果转为对应类型的响应信息

  • 使用 @ResponseBody对处理方法进行标注;
  • 使用ResponseEntity<T>作为返回值;
       Spring 首先根据请求头或响应头的Accept 属性选择匹配的 HttpMessageConverter, 进而根据参数类型或泛型类型的过滤得到匹配的HttpMessageConverter, 若找不到可用的HttpMessageConverter 将报错。(@RequestBody 和 @ResponseBody不需要成对出现) 2.3 示例(摘自网络)

猜你喜欢

转载自super-wangj.iteye.com/blog/2390451
今日推荐