注解说明--@RestController

文章介绍了Spring框架中的@RestController注解,如何标记类为RESTful控制器,处理HTTP请求,以及如何配合RequestMapping和ResponseBody进行请求路径和自动转换响应体的使用。以RedisController为例,展示了如何操作Redis并返回JSON响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注解说明–@RestController

@RestController 是 Spring 框架中的一个注解,用于标记一个类为 RESTful 风格的控制器。它结合了 @Controller 和 @ResponseBody 两个注解的功能。

使用 @RestController 注解标记的类,通常用于处理 HTTP 请求,并返回 JSON 或其他格式的数据作为响应。@RestController 简化了编写 RESTful 服务的代码,使得开发人员可以更加方便地创建和维护基于 HTTP 的 API 接口。

@RestController 的主要作用包括:

  • 标记类为 RESTful 控制器:使用 @RestController 注解将一个类标记为 RESTful 控制器,表示该类处理 HTTP 请求并返回相应的数据。
  • 通常配合其他注解一起使用:@RestController 注解通常与其他注解一起使用,如 @RequestMapping、@GetMapping、@PostMapping 等,用于指定请求的路径和方法。
RedisController 文件:
package com.yunya.springboot_redis.controller;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("redis")
public class RedisController {

    private final RedisTemplate redisTemplate;

    public RedisController(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    @GetMapping("save")
    public String save(String key, String value) {
        System.out.println("begin");
        String redis_val = (String) redisTemplate.opsForValue().get(key);
        System.out.println("redis_val:"+redis_val);
        redisTemplate.opsForValue().set(key, value);
        System.out.println("redisController save() working");
        return "success";
    }

}

在浏览器输入地址:http://localhost:10086/redis/save?key=springredis&value=two,返回结果如下:
在这里插入图片描述

  • 自动转换为响应体:@RestController 中的方法可以使用 @ResponseBody 注解来指示方法的返回值将被自动转换为响应体并返回给客户端,默认转换为 JSON 格式。
  • 处理请求和参数绑定:@RestController 中的方法可以接受不同类型的请求参数(如路径变量、查询参数、请求体等),并根据业务逻辑进行处理。
### 控制器注解的核心区别 在 Spring 框架中,`@Controller` 和 `@RestController` 是用于处理 HTTP 请求的两个核心注解,但它们的应用场景和行为存在显著差异。 `@Controller` 注解用于标记一个类为控制器组件,其方法返回值通常是一个视图名称。Spring MVC 会通过视图解析器将该名称解析为实际的视图资源(如 HTML 页面),并将模型数据填充到视图中以呈现给客户端[^1]。这种类型的控制器适合传统的服务器端渲染模式,例如返回 `.html` 文件作为响应内容。 ```java @Controller public class HomeController { @GetMapping("/") public String home() { return "index"; // 返回视图名称,由视图解析器解析 } } ``` 而 `@RestController` 则结合了 `@Controller` 和 `@ResponseBody` 的功能。它表示该类中的所有方法都会直接将返回值序列化为 HTTP 响应体,而不是经过视图解析器处理。这意味着返回的数据通常是 JSON 或 XML 格式,适用于构建 RESTful API 接口,特别适合前后端分离架构中后端仅提供数据服务的情况[^2]。 ```java @RestController public class ApiController { @GetMapping("/data") public Map<String, Object> getData() { Map<String, Object> response = new HashMap<>(); response.put("message", "Hello, World!"); return response; // 返回值自动转换为 JSON } } ``` 若开发者尝试在使用 `@RestController` 的方法中返回视图名称,将会导致错误,因为框架不会进行视图解析操作[^3]。因此,在不确定是否需要返回页面的情况下,建议优先使用 `@Controller`,并在需要返回数据时手动添加 `@ResponseBody` 注解,以实现灵活的响应类型切换[^4]。 --- ### 使用场景对比 | 场景 | 推荐注解 | 说明 | |------|----------|------| | 返回 HTML 页面(如 Thymeleaf、JSP) | `@Controller` | 配合视图解析器使用,适合传统 MVC 架构 | | 提供 JSON/XML 数据接口 | `@RestController` | 默认返回数据格式,适用于 RESTful API | | 同一控制器中混合返回页面和数据 | `@Controller` + `@ResponseBody` | 灵活控制方法返回类型 | --- ### 注意事项 - 在使用 `@RestController` 时,不应返回视图名称字符串,否则会导致视图解析失败。 - 若项目中包含模板引擎(如 Thymeleaf),确保依赖已正确引入,并且视图文件路径与控制器返回的视图名称匹配。 - 不推荐随意混用 `@Controller` 和 `@ResponseBody`,除非确实需要在同一控制器中支持多种响应类型。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值