SpringBoot的Controller四种方法返回值简介
下文笔者讲述Controller返回值简介说明,如下所示
Controller返回值简介
| 返回值类型 | 主要用途 | 适用场景 | |----------------------|---------------------------------------|----------------------------------| | `String` | 返回视图名称 | 渲染 HTML 页面 | | `ModelAndView` | 显式返回模型数据和视图名称 | 复杂视图渲染 | | `ResponseEntity<?>` | 完全控制 HTTP 响应 | 需要自定义响应头或状态码 | | 对象(如 `User`) | 返回 JSON 或 XML 数据 | RESTful API 开发 |
返回`String`
- 功能:
用于返回视图名称(配合Thymeleaf、Freemarker 等模板引擎使用)
- 行为:
- Spring 会将返回的字符串解析为视图名称
并通过视图解析器渲染对应的页面。
- 如果没有配置视图解析器,
则会直接返回字符串作为响应体。
- 适用场景:需要渲染 HTML 页面时。
例
@Controller
public class MyController {
@GetMapping("/home")
public String home() {
return "index"; // 返回名为 "index" 的视图(如 index.html)
}
}
返回`ModelAndView`
-功能:
显式地返回一个`ModelAndView`对象
包含模型数据和视图名称。
- 行为:
- `ModelAndView` 对象中
可以同时设置模型数据(传递给视图的数据)和视图名称。
- 更加灵活,适合复杂的视图渲染场景。
- 适用场景:需要同时指定模型数据和视图名称时。
例
@Controller
public class MyController {
@GetMapping("/details")
public ModelAndView details() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name", "Spring Boot"); // 添加模型数据
modelAndView.setViewName("details"); // 设置视图名称
return modelAndView;
}
}
返回`ResponseEntity<?>`
- 功能:
用于完全控制HTTP响应
包括状态码、响应头和响应体
- 行为:
- 可以自定义 HTTP 状态码、响应头和响应体内容。
- 适用于需要精确控制 HTTP 响应的场景。
- 适用场景:API 开发中需要返回复杂响应或非标准状态码时。
例
@RestController
public class MyController {
@GetMapping("/data")
public ResponseEntity<String> getData() {
return ResponseEntity.ok().header("Custom-Header", "Value").body("Success"); // 自定义响应头和状态码
}
}
返回对象(如 `User`, `list<User>` 等)
- 功能:
直接返回一个 Java 对象
Spring 会自动将其序列化为 JSON 或 XML 格式(具体取决于 `Content-Type` 和配置)
- 行为:
- 默认情况下,`@RestController` 会将返回的对象转换为 JSON 格式并写入响应体。
- 如果是 `@Controller`,则需要配合 `@ResponseBody` 注解才能实现相同效果。
- 适用场景:RESTful API 开发中返回 JSON 数据时。
例
@RestController
public class MyController {
@GetMapping("/user")
public User getUser() {
return new User(1, "John Doe"); // 返回一个 User 对象,自动序列化为 JSON
}
static class User {
private int id;
private String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
// Getters and Setters
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


