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

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

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

1. 处理Json数据的样例

总共三步:

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

spring mvc配置json时间 springmvc如何处理json数据_SpringMVC

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)输出为响应信息。

方法有:

  • 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。

工作流程如下:

spring mvc配置json时间 springmvc如何处理json数据_spring mvc配置json时间_02

 

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

将请求信息转化并绑定到处理方法的入参中:

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

将响应结果转为对应类型的响应信息:

  • 使用 @ResponseBody对处理方法进行标注;
  • 使用ResponseEntity<T>作为返回值;

Accept 属性选择匹配的 HttpMessageConverter, 进而根据参数类型或泛型类型的过滤得到匹配的HttpMessageConverter, 若找不到可用的HttpMessageConverter 将报错。(@RequestBody 和 @ResponseBody不需要成对出现)

2.3 示例(摘自网络)

       因项目中主要使用处理Json数据,因此针对HttpMessageConverter的其他使用并未做demo,因此此处提供的网上案例仅供参考。

1. @RequestBody、@ResponseBody 示例

spring mvc配置json时间 springmvc如何处理json数据_xml_03



2. HttpEntity、ResponseEntity 示例

spring mvc配置json时间 springmvc如何处理json数据_HttpMessageConverter_04