springboot常见注解
@Controller和@RestController 两种控制器
Spring中有Controller,RestController的两种控制器,都是用来表示Spring某个类的是否可以接收HTTP请求。
但是不同的是:
- Controller:标识一个Spring类是Spring MVC controller处理器。
- RestController: 主要用于Restfull接口,返回客户端数据请求。
所以RestController是@Controller和@ResponseBody的结合体,两个标注合并起来的作用。
@Controller的用法
1、创建pojo 包,并创建User 对象
package com.weiz.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
public class User {
private String name;
@JsonIgnore
private String password;
private Integer age;
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss",locale = "zh",timezone = "GMT+8")
private Date birthday;
@JsonInclude(JsonInclude.Include.NON_NULL)
private String desc;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
2、创建UserController 控制器
package com.weiz.controller;
import com.weiz.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Date;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/getUser")
@ResponseBody
public User getUser(){
User u = new User();
u.setName("weiz");
u.setAge(18);
u.setBirthday(new Date());
u.setPassword("weiz");
return u;
}
}
@RestController的用法
其实 RestController是Controller和ResponseBody的结合体,两个标注合并起来的作用。
所以,将上面的UserController 修改如下即可:
package com.weiz.controller;
import com.weiz.pojo.JSONResult;
import com.weiz.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
//@Controller
@RestController // RestController = Controller + ResponseBody
@RequestMapping("/user")
public class UserController {
@RequestMapping("/getUser")
//@ResponseBody
public JSONResult getUser(){
User u = new User();
u.setName("weiz222");
u.setAge(20);
u.setBirthday(new Date());
u.setPassword("weiz222");
return u;
}
}
@GetMapping、@PostMapping 和 @RequestMapping
总的来说
@GetMapping等于@RequestMapping(method = RequestMethod.GET)
@PostMapping等于@RequestMapping(method = RequestMethod.POST)
@RequestMapping注解
@RequestMapping是Spring MVC中用于映射web请求(如URL路径)到具体的方法上的注解。它既可以标注在类上,也可以标注在方法上。标注在类上时,表示类中的所有响应请求的方法都是以该类路径为父路径。
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
// ... 获取用户信息的逻辑
return user;
}
}
在上述代码中,@RequestMapping("/users")注解表示该控制器处理所有以/users为前缀的URL请求。而@GetMapping("/{id}")则表示处理GET类型的请求,具体路径为/users/{id}。
@PostMapping注解
@PostMapping是一个组合注解,它是@RequestMapping(method = RequestMethod.POST)的缩写。它用于处理HTTP POST请求的方法,只能标注在方法上。使用@PostMapping注解的方法将仅响应POST请求。
示例:
@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping("/create")
public User createUser(@RequestBody User user) {
// ... 创建用户信息的逻辑
return createdUser;
}
}
在上述代码中,@PostMapping("/create")表示该方法处理的是POST请求,路径为/users/create。通常用于创建新的资源。
@PostMapping注解
@PostMapping是一个组合注解,它是@RequestMapping(method = RequestMethod.POST)的缩写。它用于处理HTTP POST请求的方法,只能标注在方法上。使用@PostMapping注解的方法将仅响应POST请求。
示例:
@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping("/create")
public User createUser(@RequestBody User user) {
// ... 创建用户信息的逻辑
return createdUser;
}
}
在上述代码中,@PostMapping("/create")表示该方法处理的是POST请求,路径为/users/create。通常用于创建新的资源。
@RequestMapping、@PostMapping、@GetMapping之间的区别
功能区别:
@RequestMapping是一个通用的请求映射注解,可以处理所有类型的HTTP请求。
@PostMapping和@GetMapping则分别是专门处理POST和GET请求的注解,它们具有更明确的语义。
使用场景:
- 当你需要处理多种类型的HTTP请求时,使用@RequestMapping是合适的。
- 你只想处理POST请求时,应使用@PostMapping。
- 当你只想处理GET请求时,应使用@GetMapping。
代码简洁性: - @PostMapping和@GetMapping相比于@RequestMapping更加简洁明了,因为它们已经限定了请求的方法类型。
在实际的Spring Boot应用中,为了代码的可读性和维护性,建议根据具体需求选择使用这些注解。通常,对于简单的CRUD操作,使用@GetMapping、@PostMapping等特定类型的注解更为合适;而对于更复杂的请求处理逻辑,可以使用@RequestMapping并明确指定请求方法类型。
@ResponseBody 和 @RequestBody以及@PathVariable的作用
@ResponseBody
@ResponseBody的作用是将后端以return返回的javabean类型数据转为json类型数据。(后端向前端传数据)
@ResponseBody主要做两件事:
-
将返回值转换成JSON,如果返回值是String或者其他基本数据类型则不满足key-value形式,不能转换成json类型,则返回字符串
-
设置响应头为application/json;charset=utf-8;返回值为字符串,则不能转换成json格式的则响应头设置为text/html,
@ResponseBody在Controller类中的使用
返回值会转成json数据
@RequestMapping("Demo11")
@ResponseBody
public People Demo11(People peo){
System.out.println("这是Demo11!!!!"+peo.getName());
People p = new People();
p.setAge(peo.getAge());
p.setName(peo.getName());
System.out.println("@@@@@@@@@@@@22 -- "+p.toString());
return p;
}
返回结果(在页面中展示):
返回值为中文字符串,需要设置字符编码:
返回值为字符串的情况:返回值为字符串,则不能转换成json格式的,返回的响应头 (conten-type) 为text/html,
为防止中文乱码,因此需要使用@RequestMapping(,produces = “text/html;charset=utf-8”)
设置响应头编码方式为utf-8
实例代码:
@RequestMapping(value = "Demo12",produces = "text/html;charset=utf-8")
@ResponseBody
public String Demo12(People peo){
return peo.getName();
}
@RequestBody
@RequestBody
是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean
对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter
进行解析,然后封装到形参上。
@RequestBody
的作用是将前端传来的json格式的数据转为自己定义好的javabean对象(前端向后端传递数据)
@RequestBody 用于将请求体中的内容(通常是 JSON 格式的数据)绑定到方法参数中。在前端发送 POST 请求时,数据会被放入请求体中,后端通过 @RequestBody 注解来接收并解析请求体中的数据。
举例:
接口示例:
java
@PostMapping("/add")
public Result add(@RequestBody Comment comment) {
commentService.add(comment);
return Result.success();
}
在前端中,假设你通过 request.post('/comment/add', data.form)
发送的请求,data.form
是一个对象,包含评论的数据(比如 text, author 等)。这个对象会被放入请求体中,并被 @RequestBody 注解自动解析为 Comment 对象。
在这种方式中,前端请求的格式通常是这样的:
{
"text": "这是一个评论",
"author": "用户1"
}
@PathVariable
@PathVariable
的作用是获取url中的动态参数,常用于RestFul风格的编程。通过这种方式,前端可以将参数写在url中,这个类似于占位符
例如:通过id获得用户信息,前端的url可以表示为http://localhost:8080/getUser/1
这个1就是想要查询的用户id
后端通过@PathVariable来接收这个动态参数
@GetMapping("/getUser/{id}")
public User getUser(@PathVariable("id") String id){
return userService.getUserById(id);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2020-01-05 秒速五厘米 (牛客二分题)
2020-01-05 牛客始战
2020-01-05 牛客-Y 老师的井字窗
2020-01-05 牛客-Y 老师的乐高小镇
2020-01-05 BFS迷宫问题
2020-01-05 bfs