springboot中Controller常用注解

1.@RequestParam

@RequestParam可以从 URL 中提取请求参数,并将它们绑定到方法的参数上。
一般多用于get请求,但是其它的请求格式也可以使用。

基本用法

假设有一个简单的 GET 请求,URL 如下:

 

text

代码解读

复制代码

http://localhost:8080/greet?name=John&age=25

在这个请求中,name 和 age 是查询参数。可以使用 @RequestParam 注解来提取这些参数并将其传递给控制器的方法。

 

java

代码解读

复制代码

@RestController public class GreetingController { @GetMapping("/greet") public String greet(@RequestParam String name, @RequestParam int age) { return "Hello " + name + ", you are " + age + " years old."; } }

给前端返回:

 

text

代码解读

复制代码

Hello John, you are 25 years old.

常用属性

  • required

    required 属性用来指定请求中是否必须包含这个参数,默认为 true。所以,写了@RequestParam注解,就说明这个参数前端必须要传,如果不传,spring会报错:

 

java

代码解读

复制代码

package com.akbar.controller; import org.springframework.web.bind.annotation.*; @CrossOrigin @RestController @RequestMapping("/greet") public class TestController { @GetMapping() public String greet(@RequestParam String name) { return "Hello " + name + "!"; } }

如果这个参数也可以不传,要这样写:

 

java

代码解读

复制代码

package com.akbar.controller; import org.springframework.web.bind.annotation.*; @CrossOrigin @RestController @RequestMapping("/greet") public class TestController { @GetMapping() public String greet(@RequestParam(required = false) String name) { return "Hello " + name + "!"; } }

  • defaultValue

    defaultValue 属性可以指定当请求中没有该参数时使用的默认值。这个属性在参数为 required = false 时非常有用。

 

java

代码解读

复制代码

@GetMapping("/greet") public String greet(@RequestParam(defaultValue = "Guest") String name) { return "Hello " + name; }

  • 处理多个参数
 

java

代码解读

复制代码

@GetMapping("/user") public String user(@RequestParam String username, @RequestParam int age) { return "User: " + username + ", Age: " + age; }

POST 请求中使用@RequestParam

在 POST 请求中,@RequestParam 可以用来处理 表单提交的数据。这种情况通常见于 HTML 表单通过 POST 请求发送数据时。

 

java

代码解读

复制代码

@PostMapping("/submitForm") public String handleFormSubmission(@RequestParam String username, @RequestParam String password) { return "Received username: " + username + " and password: " + password; }

比如,前端的表单是这样的:

 

html

代码解读

复制代码

<form action="/submitForm" method="post"> <input type="text" name="username" placeholder="Enter username"> <input type="password" name="password" placeholder="Enter password"> <button type="submit">Submit</button> </form>

其它请求格式

因为其它请求格式中用的很少,所以这里不演示,但是其它请求格式都可以用。

如果不写会怎么样

如果没有显式的注解,比如什么注解都没有,Spring 会自动查找请求中的参数(如 URL 查询参数或表单数据),并将它们绑定到方法的对应参数。 比如URL 查询参数:

 

java

代码解读

复制代码

package com.akbar.controller; import org.springframework.web.bind.annotation.*; @CrossOrigin @RestController @RequestMapping("/greet") public class TestController { @GetMapping() public String greet( String name,int age) { return "Hello " + name + ", you are "+age+" years old"; } }

比如表单数据:

 

java

代码解读

复制代码

package com.akbar.controller; import org.springframework.web.bind.annotation.*; @CrossOrigin @RestController @RequestMapping("/greet") public class TestController { @PostMapping public String greet( String name,int age) { return "Hello " + name + ", you are "+age+" years old"; } }

比如html表单是这样的:

 

html

代码解读

复制代码

<form action="/login" method="post"> <input type="text" name="name" /> <input type="password" name="password" /> <button type="submit">Login</button> </form>

但是前端要传递的是json对象,这个时候就不能什么都不写了:

 

java

代码解读

复制代码

package com.akbar.controller; import com.akbar.pojo.User; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/greet") public class TestController { @PostMapping public User greet(User user) { System.out.println(user.getUsername()); System.out.println(user.getAge()); return user; } }

很显然后端拿不到这个json数据。
如果我们用@RequestBody,后端就可以拿到:

 

java

代码解读

复制代码

package com.akbar.controller; import com.akbar.pojo.User; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/greet") public class TestController { @PostMapping public User greet(@RequestBody User user) { System.out.println(user.getUsername()); System.out.println(user.getAge()); return user; } }

  • 虽然不使用 @RequestParam 也能工作,但为了让代码更加明确和易于维护,建议显式地使用 @RequestParam,特别是当有多个请求参数或需要做参数验证时。

  • 使用 @RequestParam 也可以为参数指定默认值、要求为必填项、进行类型转换等。

2.@RequestBody

@RequestBody 允许将请求体(一般是 JSON 格式的数据)自动转换为 Java 对象,极大地简化了数据的解析和绑定过程。

基本用法

假设我们有一个表示用户信息的 User 类,如下所示:

 

java

代码解读

复制代码

public class User { private String username; private String password; private int age; // Getters and setters }

假设我们有一个前端发送 JSON 格式数据的 POST 请求,URL 为 /user,请求体内容如下:

 

json

代码解读

复制代码

{ "username": "john_doe", "password": "password123", "age": 30 }

在 Spring Boot 中,我们可以通过 @RequestBody 来自动将 JSON 数据转换为 User 对象。

 

java

代码解读

复制代码

@RestController public class UserController { @PostMapping("/user") public String createUser(@RequestBody User user) { // 使用自动绑定的 User 对象 return "Created user: " + user.getUsername() + ", Age: " + user.getAge(); } }

3.@PathVariable

@PathVariable注解用于 提取 URL 路中的变量。它通常用于处理 RESTful 风格的 URL 中的路径参数。

基本用法

 

text

代码解读

复制代码

/users/{id}

假设我们有一个表示用户信息的 RESTful API,URL 格式如下: 假设我们要从 URL /users/{id} 提取 id 参数,并将其作为方法的参数:

 

java

代码解读

复制代码

@RestController public class UserController { @GetMapping("/users/{id}") public String getUser(@PathVariable Integer id) { return "User ID: " + id; } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值