Spring MVC 数据返回
# Spring MVC 数据返回的方式
在 Spring MVC 中,数据返回有多种方式,主要包括返回视图页面、返回 JSON 数据、返回纯文本等。常见的返回方式有以下几种:
- 返回视图(如 JSP、Thymeleaf 等)
- 返回 JSON 数据
- 返回纯文本数据
- 重定向和转发
- 返回文件(如图片、PDF 等)
# 1. 返回视图页面
Spring MVC 中可以通过返回视图名称来渲染页面,这通常用于返回 HTML 页面。
示例代码
@Controller
@RequestMapping("/view")
public class ViewController {
// 返回视图名称,将映射到对应的视图模板
@GetMapping("/hello")
public String helloView(Model model) {
// 向视图传递数据
model.addAttribute("message", "你好,世界!");
return "hello"; // 返回视图名称(如 hello.html)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
注释说明
@Controller
:标识该类为 Spring MVC 控制器,返回的内容由视图解析器处理。Model
:用于向视图传递数据,数据可以在模板引擎(如 Thymeleaf)中使用。- 返回值类型
String
:表示视图名称,Spring MVC 会根据配置的视图解析器找到对应的模板文件(如hello.html
)。
# 2. 返回 JSON 数据
在现代 Web 应用中,返回 JSON 数据是非常常见的,特别是在前后端分离的项目中。
示例代码
@RestController // 相当于 @Controller + @ResponseBody
@RequestMapping("/api")
public class ApiController {
@GetMapping("/getUser")
public User getUser() {
// 返回 JSON 数据,Spring 会将对象自动转换为 JSON 格式
return new User(1, "张三", 25);
}
}
// 用户实体类
class User {
private int id;
private String name;
private int age;
// 构造函数、Getters 和 Setters
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
// Getters 和 Setters 略
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
注释说明
@RestController
:相当于@Controller
+@ResponseBody
,用于返回 JSON 数据,自动将返回对象序列化为 JSON。- 对象返回值:Spring Boot 自动使用 Jackson 将 Java 对象转换为 JSON 数据。
- 适用场景:前后端分离,通常用于 API 接口开发。
# 3. 返回纯文本数据
有时需要返回简单的文本数据,例如调试信息或状态信息。
示例代码
@RestController
@RequestMapping("/text")
public class TextController {
@GetMapping("/plain")
public String getPlainText() {
// 返回纯文本数据
return "这是一个纯文本响应";
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
注释说明
- 返回值类型
String
:如果使用@RestController
,返回的String
默认作为文本输出。 @ResponseBody
(可选):如果使用@Controller
,需要显式添加@ResponseBody
注解以返回纯文本。
# 4. 重定向和转发
重定向和转发用于控制请求的跳转。
# 重定向
- 作用:
redirect:
在 Spring MVC 中用于重定向操作,返回 HTTP 302 状态码,告诉浏览器去请求一个新的 URL。这是一种服务器端的重定向操作,适合在后端控制页面跳转时使用。
@Controller
@RequestMapping("/redirect")
public class RedirectController {
@GetMapping("/toHome")
public String redirectToHome() {
// 重定向到指定路径
return "redirect:/home";
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 转发
- 作用:
forward:
是服务器内部的请求转发,浏览器的 URL 不会发生变化,只是在服务器内部进行请求的跳转。这种跳转不会返回新的页面给浏览器,适用于服务器端在处理流程中切换请求路径。
@Controller
@RequestMapping("/forward")
public class ForwardController {
@GetMapping("/toLogin")
public String forwardToLogin() {
// 转发到指定路径
return "forward:/login";
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
笔记
redirect:
和forward:
是服务器端的跳转操作,适用于服务器控制的页面跳转或请求流转,通常用于传统 Web 开发。redirect:
和forward
不适用于单页面应用项目,在单页面应用中,页面只有一个 HTML 文件,所有的内容切换、组件加载和视图渲染都在前端通过 JavaScript 动态实现。
# 5. 返回文件(如图片、PDF 等)
Spring MVC 可以通过 HttpServletResponse
返回文件,如图片、PDF、Excel 等。
示例代码
@RestController
@RequestMapping("/file")
public class FileController {
@GetMapping("/download")
public void downloadFile(HttpServletResponse response) throws IOException {
// 设置响应头信息
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"example.pdf\"");
// 获取文件并写入响应输出流
InputStream in = new FileInputStream(new File("path/to/example.pdf"));
IOUtils.copy(in, response.getOutputStream());
response.flushBuffer();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
注释说明
HttpServletResponse
:用于设置响应头信息,控制文件的下载。Content-Disposition
:设置为attachment
表示这是一个下载文件。- 适用场景:文件下载、文件流输出。
总结
Spring MVC 提供了多种数据返回方式,适应不同的开发需求:
- 返回视图页面:适用于传统 Web 应用。
- 返回 JSON 数据:适用于前后端分离的项目。
- 返回纯文本数据:适用于返回简单字符串响应。
- 重定向和转发:用于控制请求的跳转和流程。
- 返回文件:适用于文件下载、图片响应等场景。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08