springboot 控制器
文章目录
-
- [springboot 控制器](#springboot 控制器)
- 1.Controller和RestController
- 2.参数传递
-
- @RequestParam:把传送参数绑定到方法上
- @PathVaraible
-
- [@PathVariable 是 Spring MVC 中用于处理 RESTful Web 服务时的一个注解,它允许你从 URL 中提取变量值,并将这些值绑定到控制器处理方法的参数上。这个注解通常与 @RequestMapping 或其派生注解(如 @GetMapping、@PostMapping 等)一起使用,来指定哪些请求路径和方法应该被映射。](#@PathVariable 是 Spring MVC 中用于处理 RESTful Web 服务时的一个注解,它允许你从 URL 中提取变量值,并将这些值绑定到控制器处理方法的参数上。这个注解通常与 @RequestMapping 或其派生注解(如 @GetMapping、@PostMapping 等)一起使用,来指定哪些请求路径和方法应该被映射。)
- @RequestBody
1.Controller和RestController
Controller:数据和页面
RestController:数据
所以我们的controller一般在springmvc中使用,返回页面,但是现在的项目基本上都是前后端分离项目,可以多使用RestController
也就是说,RequestMapping是一个标准的写法,可以替换GetMapping等,如以下代码
cpp
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
//标准写法
@RequestMapping(value = "/bz",method = RequestMethod.GET)
public String bz(){
return "bz!!";
}
//任何一种访问方式都行
@RequestMapping("/any")
public String any(){
return "any!!";
}
//get访问方式
@GetMapping("/hello")
public String hello(){
return "hello啊书法大赛 world!";
}
}
也就是说,以下两个方式是等同的,post、delete、update等类推
2.参数传递
@RequestParam:把传送参数绑定到方法上
1.当传送参数名称和方法一样时,可以省略
java
@GetMapping("/hello")
public String hello(String nikename){
return nikename+"你好";
}
反之不可以
java
@GetMapping("/hello")
public String hello(@RequestParam(value = "nikename") String name){
return name+"你好";
}
post方法测试参数传递
java
//Post测试参数传递
@RequestMapping(value = "/test",method = RequestMethod.POST)
public String test(String name,String password){
return name + password;
}
这个时候我们不能单独的在浏览器测试了,需要借助postman或者是其他软件模拟浏览器发送请求,因为在输入栏我们无法传递post请求。
我这里借助idea自带的http文件测试接口
java
###
POST http://localhost:8080/test
Content-Type: application/x-www-form-urlencoded
name=John+Doe&password=30
<> 2024-09-23T090528.200.txt
对应的post接口
当我们使用这样的方式去传递类数据时,也是直接按照类里的各个属性,传送参数要和类里的各个属性名相同,这样代码会自动帮我们匹配,例:
java
//Post测试参数(使用json发送多个参数,或者类参数)
@RequestMapping(value = "/test1",method = RequestMethod.POST)
public User test1(User user){
System.out.println(user.getName());
return user;
}
对应的测试接口写法
java
POST http://localhost:8080/test1
Content-Type: application/x-www-form-urlencoded
id=1&name=king&phone=1841891561
@PathVaraible
@PathVariable 是 Spring MVC 中用于处理 RESTful Web 服务时的一个注解,它允许你从 URL 中提取变量值,并将这些值绑定到控制器处理方法的参数上。这个注解通常与 @RequestMapping 或其派生注解(如 @GetMapping、@PostMapping 等)一起使用,来指定哪些请求路径和方法应该被映射。
java
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{userId}")
public User getUserById(@PathVariable("userId") Long userId) {
// 这里根据userId获取用户信息,并返回User对象
// 示例代码,实际情况需要替换为真实的用户数据获取逻辑
return new User(userId, "John Doe");
}
}
@RequestBody
当我们需要接受一个json的数据时,可以使用这样一个注解
例:
接口写法:
java
//Post测试参数(使用json发送多个参数,或者类参数)
@RequestMapping(value = "/test2",method = RequestMethod.POST)
public User test2(@RequestBody User user){
System.out.println(user);
return user;
}
}
测试写法:
java
POST http://localhost:8080/test2
Content-Type:application/json
{
"id": 1,
"name": "king",
"phone": 18474314
}