spring boot controller各种注解
时间: 2025-05-23 17:36:07 浏览: 13
### Spring Boot Controller 中常用注解详解
#### @Controller 注解
`@Controller` 是用于定义控制器类的注解。该注解表明此类中的方法可以处理 HTTP 请求并返回视图名称或模型数据[^1]。
```java
@Controller
public class MyController {
// 方法实现...
}
```
#### @RestController 注解
`@RestController` 组合了 `@Controller` 和 `@ResponseBody` 的功能,简化 RESTful Web Service 开发过程。此注解表示整个类下的所有响应都将以 JSON 或 XML 形式直接写入 HTTP 响应体中而不是跳转到页面[^2]。
```java
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/data")
public List<String> getData() {
return Arrays.asList("item1", "item2");
}
}
```
#### @RequestMapping 注解
`@RequestMapping` 提供路由映射的功能,能够配置 URL 映射规则以及请求方式(GET, POST 等)。支持多种参数设置来匹配不同的路径模式、HTTP 方法等条件[^3]。
```java
@RequestMapping(value="/hello", method=RequestMethod.GET)
public String sayHello(Model model){
model.addAttribute("message","Hello World!");
return "greeting";
}
```
#### @GetMapping/@PostMapping 注解
为了使代码更加简洁明了,Spring 引入了更具体的 HTTP 方法注解如 `@GetMapping`, `@PostMapping`. 这些注解分别对应 GET/POST 请求,并且内部实现了对 `@RequestMapping` 的封装[^4]。
```java
@GetMapping("/users/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
User user = userService.findById(id);
if (user != null) {
return new ResponseEntity<>(user, HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
@PostMapping("/users")
public ResponseEntity<Void> createUser(@RequestBody User newUser) {
boolean created = userService.save(newUser);
if(created){
URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(newUser.getId()).toUri();
return ResponseEntity.created(location).build();
}else{
return ResponseEntity.noContent().build();
}
}
```
#### 参数绑定相关注解
- **@RequestParam**: 将查询字符串或者表单提交的数据作为方法参数注入。
```java
@GetMapping("/search")
public String searchUsers(@RequestParam String keyword){}
```
- **@PathVariable**: 把URL模板变量赋给方法形参上
```java
@GetMapping("/articles/{year}/{month}")
public void handle(@PathVariable int year,@PathVariable int month){}
```
- **@RequestBody**: 解析Http请求的内容为对象实例化
```java
@PostMapping("/createUser")
public void createNewUser(@RequestBody User user){};
```
- **@ModelAttribute**: 添加属性至Model以便于在视图层访问
```java
@ModelAttribute("attributeName")
public Object methodName(){}
```
#### 返回值解析器
当控制器的方法返回一个String类型的值时,默认情况下会被认为是要渲染的一个逻辑视图名;而如果返回的是实体对象,则会通过消息转换器将其序列化成JSON/XML格式发送回客户端[^5]。
阅读全文
相关推荐


















