SpringMVC的数据响应
本文最后更新于:1 年前
处理同步请求(form、超链接)的方法的返回类型定义为String或者ModelAndView,以实现页面的跳转。
处理异步请求(ajax请求),在控制器方法上使用@ResponseBody 注解告知SpringMVC框架,方法返回的字符串不是跳转是直接在http响应体中返回。
控制器响应同步请求
处理同步请求(form、超链接)的方法的返回类型定义为String或者ModelAndView,以实现页面的跳转。
返回String类型进行页面跳转
将返回的字符串与视图解析器的前后缀拼接后跳转:
详细使用说明见『传送门』。
返回带有前缀的字符串:
- 转发:
forward:/WEB-INF/views/index.jsp
- 重定向:
redirect:/index.jsp
详细使用说明见『传送门』。
- 转发:
通过ModelAndView对象返回
返回类型为 ModelAndView
使用 ModelAndView 对象封装数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14@RequestMapping(value = "/quick2")
public ModelAndView save2 () {
/*
model:模型,用于封装数据
view:视图,用于展示数据
*/
ModelAndView modelAndView = new ModelAndView();
//设置模型数据(相当于放入请求作用域中)
modelAndView.addObject("username","gaojie.cc");
//设置视图名称
//如果需要重定向只需要加redirect前缀:modelAndView.setViewName("redirect:success");
modelAndView.setViewName("success");
return modelAndView;
}在视图文件 success.jsp 中获取数据并展示
1
2
3
4
5
6
7
8
9%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Hello SpringMVC! ${username}</h1>
</body>
</html>也可以采用注入的方式获得 ModelAndView 对象
1
2
3
4
5
6
7
8//modelAndView对象也可以不手动创建,而是采用使用注入的方式作为方法的参数
@RequestMapping(value = "/quick3")
public ModelAndView save3 (ModelAndView modelAndView) {
modelAndView.addObject("username","Nice!");
modelAndView.setViewName("success");
//modelAndView.setViewName("success",new User(1,"张珊"));
return modelAndView;
}
以字符串形式做视图进行数据的返回
1 |
|
通过注入请求对象进行视图和数据的返回(不推荐)
1 |
|
控制器响应异步请求
处理异步请求(ajax请求),在控制器方法上使用@ResponseBody 注解告知SpringMVC框架,方法返回的字符串不是跳转是直接在http响应体中返回。
- 控制器方法的返回类型设置为响应给ajax请求的对象类型
- 在控制器方法前添加
@ResponseBody
注解,将返回的对象转换成JSON响应给ajax请求 - 如果一个控制器类中的所有方法都是响应ajax请求,则可以直接在控制器类前添加
@ResponseBody
注解
直接返回字符串
Web基础阶段,客户端访问服务器端,如果想直接回写字符串作为响应体返回的话,只需要使用 response.getWriter().print(“hello world”)
即可,那么在 Controller 中想直接回写字符串该怎样呢?
使用response中的输出流进行响应
通过 SpringMVC 框架注入的response对象,使用 response.getWriter().print(“hello world”)
回写数据,此时不需要视图跳转,业务方法返回值为 void。
1 |
|
在控制器方法上使用@ResponseBody 注解
将需要回写的字符串直接返回,但此时需要通过 @ResponseBody 注解告知SpringMVC框架,方法返回的字符串不是跳转是直接在http响应体中返回。
1 |
|
1 |
|
返回对象或集合
使用response中的输出流进行响应
- 控制器方法的返回类型为
void
; - 控制器方法添加
HttpServletResponse response
参数; - 在方法中通过 response 获取输出流,使用流响应ajax请求
1 |
|
直接在控制器方法返回响应的对象
使用jackson进行转换
在异步项目中,客户端与服务器端往往要进行json格式字符串交互,此时我们可以手动拼接json字符串返回。手动拼接json格式字符串的方式很麻烦,开发中往往要将复杂的java对象转换成json格式的字符串,我们可以使用 web 阶段学习过的 json 转换工具 jackson 进行转换。
1 |
|
1 |
|
配置处理器映射器进行转换
通过 SpringMVC 帮助我们对对象或集合进行 json 字符串的转换并回写,为处理器适配器配置消息转换参数,指定使用 jackson 进行对象或集合的转换。
1 |
|
1 |
|
使用mvc的注解驱动代替上述配置
在方法上添加 @ResponseBody 就可以返回json格式的字符串,但是这样配置比较麻烦,配置的代码比较多,因此,我们可以使用mvc的注解驱动代替上述配置。
在 SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。使用 mvc:annotation-driven 自动加载 RequestMappingHandlerMapping(处理映射器)和 RequestMappingHandlerAdapter( 处 理 适 配 器 ),可用在 Spring-xml.xml 配置文件中使用 mvc:annotation-driven 替代注解处理器和适配器的配置。同时使用mvc:annotation-driven默认底层就会集成 jackson 进行对象或集合的 json 格式字符串的转换。
1 |
|
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!