springboot常见注解

 

@Controller和@RestController 两种控制器

Spring中有Controller,RestController的两种控制器,都是用来表示Spring某个类的是否可以接收HTTP请求。
但是不同的是:

  1. Controller:标识一个Spring类是Spring MVC controller处理器。
  2. 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主要做两件事:

  1. 将返回值转换成JSON,如果返回值是String或者其他基本数据类型则不满足key-value形式,不能转换成json类型,则返回字符串

  2. 设置响应头为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;
    }

返回结果(在页面中展示):
image

返回值为中文字符串,需要设置字符编码:
返回值为字符串的情况:返回值为字符串,则不能转换成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();
    }

image

@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);
    }
posted @   lipu123  阅读(13)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 全程不用写代码,我用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
点击右上角即可分享
微信分享提示