@restController的用处
时间: 2023-09-30 07:03:34 浏览: 64
@restController 是一个注解,用于在 Spring MVC 中定义 RESTful 风格的控制器。它的作用是将一个类标记为控制器,并且使其能够处理来自客户端的 REST 请求。
当一个类被标记为 @restController,它就可以处理来自客户端的 HTTP 请求,并根据请求的类型(GET、POST、PUT、DELETE等)执行相应的方法。这些方法可以返回数据或者进行其他相关操作,比如访问数据库、调用其他服务等。
通过 @restController 注解,我们可以很方便地构建和管理 RESTful API。它提供了一种简洁的方式来定义和处理请求,并且可以根据请求的路径和参数来调用相应的方法。
总结来说,@restController 的作用是将一个类标记为 RESTful 控制器,使其能够处理来自客户端的 REST 请求,并根据请求的类型执行相应的方法。
相关问题
@restcontroller跟@controller区别
### Spring Boot `@RestController` vs `@Controller` 注解区别及用法
#### 一、功能差异
`@RestController` 和 `@Controller` 都是用来定义控制器层组件的注解,但两者有着不同的用途。
- **`@Controller`**
这个注解通常用于传统的MVC模式下的控制器类。当使用此注解时,默认情况下返回的是视图名称(如JSP页面),而不是直接响应数据给客户端。如果希望返回JSON或其他形式的数据,则需额外加上`@ResponseBody`来指定方法级别的行为[^1]。
- **`@RestController`**
它实际上是组合了`@Controller`和全局范围内的`@ResponseBody`效果的一个便捷注解。这意味着被标记的方法会自动将返回的对象转换成HTTP响应体的内容,非常适合RESTful API开发,因为大多数时候API接口都倾向于发送JSON/XML格式的数据作为回应[^3]。
#### 二、代码示例对比
##### 使用 `@Controller`
下面展示了一个简单的例子,在这里我们创建了一个普通的Spring MVC控制器:
```java
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(Model model){
model.addAttribute("message", "Hello, world!");
return "index"; // 返回名为 'index' 的视图模板
}
}
```
注意这里的`return "index"`表示要渲染一个叫做`index.html`(或者其他类型的视图文件),并且传递了一些属性进去供前端显示。
##### 使用 `@RestController`
而当我们想要快速搭建起一个提供JSON数据的服务端点时就可以采用这种方式:
```java
@RestController
@RequestMapping("/api/greeting")
public class GreetingController {
private static final String template = "%s, %s!";
@GetMapping("/{name}")
public Map<String, Object> greeting(@PathVariable String name) {
Map<String, Object> map = new HashMap<>();
map.put("id", UUID.randomUUID().toString());
map.put("content", String.format(template, "Hello", name));
return map; // 直接返回对象实例,会被序列化为 JSON 发送给客户端
}
}
```
在这个案例里并没有显式的设置视图解析逻辑,而是通过返回Java对象让框架帮我们将之转化为适合传输的形式——比如JSON字符串[^4]。
---
@restcontroller与controller
### Spring Boot `@RestController` 和 `@Controller` 注解区别及使用场景
#### 一、注解功能差异
在 Spring Framework 中,`@RestController` 和 `@Controller` 都是用来定义控制器层组件的注解,不过两者有着不同的用途。
- **`@Controller`**
这是一个常规的 MVC 控制器类,在处理完请求之后返回的是视图名称(View Name),然后交给 ViewResolver 去解析。通常会配合 `ModelAndView` 或者 `String` 类型的方法返回值来指定逻辑视图名并传递模型数据给前端页面渲染[^1]。
- **`@RestController`**
它实际上相当于 `@Controller` 加上 `@ResponseBody` 的组合。这意味着当方法被调用时,默认情况下不会跳转到任何 JSP 页面或者其他模板引擎文件;而是直接将对象转换成 JSON/XML 等格式的数据响应给客户端。因此非常适合构建 RESTful Web Service 应用程序。
```java
// 示例:使用 @Controller 返回视图
@Controller
public class MyViewController {
@RequestMapping("/view")
public String handleRequest(Model model){
// 添加属性至 Model...
return "my-view"; // 跳转到名为 'my-view' 的视图资源
}
}
// 示例:使用 @RestController 返回数据体
@RestController
@RequestMapping("/api/data")
public class MyDataController {
@GetMapping("/{id}")
public ResponseEntity<MyEntity> getDataById(@PathVariable Long id) {
// 处理业务逻辑...
return new ResponseEntity<>(entity, HttpStatus.OK);
}
}
```
#### 二、适用场合分析
对于开发者来说:
- 如果应用程序主要是为了提供 API 接口服务,并且希望简化开发流程,则应该优先考虑采用 `@RestController` 来创建无状态的服务端点;
- 当项目涉及到前后端分离架构或是微服务之间的通信交互时,`@RestController` 更加适合因为其能够方便快捷地实现跨域资源共享(CORS),以及支持多种媒体类型的序列化/反序列化操作;
- 对于传统的基于表单提交和服务器端渲染网页的应用而言,应当选用 `@Controller` 并结合 Thymeleaf、JSP 等模板技术完成页面展示工作。
阅读全文