SpringBoot的Controller四种方法返回值简介

欣喜 SpringBoot 发布时间:2025-04-01 11:08:06 阅读数:6976 1
下文笔者讲述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
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202504/8420.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者