博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC_JSON
阅读量:3753 次
发布时间:2019-05-22

本文共 2836 字,大约阅读时间需要 9 分钟。

一、处理JSON

在SpringMVC中处理JSON步骤:

1、加上jar包

com.fasterxml.jackson.core
jackson-databind
2.9.5
com.fasterxml.jackson.core
jackson-core
2.9.5
com.fasterxml.jackson.core
jackson-annotations
2.9.5

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

3、在方法上加上注解 @ResponseBody

实例:

@ResponseBody    @RequestMapping(value = "/testJSON",method = RequestMethod.GET)    public Object testJSON(){        return employeeDao.getAll();    }

二、HttpMessageConverter<T>

1、HttpMessageConverter<T> 是Spring 3.0 新增加的一个接口,负责将请求信息转化为一个对象(类型为T),将对象输出为响应信息

2、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。

3、原理图:

4、关于HttpMessageConverter<T>的实现类

5、DispatcherServlet 默认装配RequestMappingHandlerAdapter ,而RequestMappingHandlerAdapter 默认装配如下

HttpMessageConverter

6、加入Jackson jar包后,RequestMappingHandlerAdapter 装配的 HttpMessageConverter 如下:

7、使用 HttpMessageConverter<T> 将请求信息转化并绑定到处理方法的入参中或将响应结果转为对应类型的响应信息,Spring 提供了两种途径

  • 使用 @RequestBody / @ResponseBody 对处理方法进行标注
  • 使用 HttpEntity<T> / ResponseEntity<T> 作为处理方法的入参或返回值
     

8、当控制器处理方法使用到 @RequestBody、@ResponseBody 或HttpEntity<T>/ResponseEntity<T> 时,Spring首先根据请求头或响应头的 Accept 属性选择匹配的 HttpMessageConverter,进而根据参数类型或泛型类型的过滤得到匹配的 HttpMessageConverter,若找不到可用的 HttpMessageConverter 将报错

9、@RequestBody 和 @ResponseBody 不需要成对出现

示例:

 

@ResponseBody    @RequestMapping(value = "/testHttpMessageConverter")    public String testHttpMessageConverter(@RequestBody String body){        System.out.println(body);        return "helloworld "+new Date();    }
File:
Desc:

 

@ResponseBody    @RequestMapping(value = "/testResponseEntity")    public ResponseEntity
testResponseEntity(HttpSession session) throws IOException { byte[] body = null; ServletContext context = session.getServletContext(); InputStream in = context.getResourceAsStream("/file/1.doc"); body = new byte[in.available()]; in.read(body); HttpHeaders headers = new HttpHeaders(); headers.add("Content-Disposition","attachment;filename=1.doc"); HttpStatus statusCode = HttpStatus.OK; ResponseEntity
entity = new ResponseEntity
(body,headers,statusCode); return entity; }

 

你可能感兴趣的文章
JAVA基础中的基础
查看>>
JDBC基础操作
查看>>
连接池
查看>>
Servlet的使用——重定向和转发
查看>>
JSP技术的使用——好像过时了唉。。。。。
查看>>
MVC模式概述
查看>>
Web之过滤器Filter
查看>>
JSON和AJAX
查看>>
web之监听器listener
查看>>
类加载器
查看>>
数据库设计
查看>>
Java虚拟机的内存分配和运行机制(粗谈)
查看>>
web开发之BaseServlet的使用
查看>>
初识Maven
查看>>
Maven分模块构建项目
查看>>
MyBatis初识
查看>>
MyBatis【进阶详解】
查看>>
面试题集锦(七)
查看>>
注解开发——Spring整合dao/service/web
查看>>
架构的演进
查看>>