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>作为返回值;
相关推荐
@RequestBody注解实现接收http请求的json数据,将json数据转换为java对象进行绑定。加上@ResponseBody注解,就不会走视图解析器,不会返回页面,目前返回的json数据。