阿里灵灵 发表于 2021-7-22 15:16

SpringBoot · Controller 参数接收方法汇总

本帖最后由 阿里灵灵 于 2021-7-22 17:21 编辑


本篇文章中用于记录Controller传参中常用的注解和方法,用于查漏补缺。
```JAVA
package com.wiki.controller;//这个包更换成你们自己项目包
import org.springframework.web.bind.annotation.*;

@RestController
public class SysRoleController {

//每次替换下面的代码即可
    @GetMapping("test")
    public String Test() {
      return "Hello World!";
    }
   
}
```
上面是原始文件,下面的所有示例都基于上面的代码进行。
## 无注解直接传参



- 只需要在url里面对应传入参数即可,spring会自动对应参数。如果参数名不正确,则为null。

```
@GetMapping("test") //设置为Get请求
public String Test(String testValue) {
    return "传递数据成功,数值为:" + testValue;
}

对应的调用URL(端口我设置为8080):
http://127.0.0.1:8080/test?testValue=1
```

参数正确:传递testValue



参数错误:传递testValue2,返回null





## @RequestParam 传参

作用:通过RequestParam,手动指定对应的参数。

```
@RequestParam("接收参数名",required= true,defaultValue="默认值")

参数名:指你要接收的参数名

required:如果为true,则url中必须出现该参数名,为false则可以不用出现。Spring默认为true。

defaultValue:设置这个参数的默认值。
```

示例一:所有设置都加上

```
@GetMapping("test")
public String Test(@RequestParam(value = "testValue1",required = true,defaultValue = "2") String testValue2) {
   return "传递数据成功,数值为:" + testValue2;
}
对应的调用URL(端口我设置为8080):
http://127.0.0.1:8080/test?testValue=1
```



如上所示,URL传递参数为testValue1,但是通过@RequestParam注解,实现由testValue2接收testValue1的值。



示例二:省略required和defaultValue

```
@GetMapping("test")
public String Test(@RequestParam("testValue1") String testValue2) {
   return "传递数据成功,数值为:" + testValue2;
}

对应的调用URL(端口我设置为8080):
http://127.0.0.1:8080/test?testValue=1
```

如上所示,可以省略required参数和defaultValue参数。


## @RequestBody 传参

作用:接收前台发送的json数据,并转化为java类型的参数。

示例:

步骤一:声明User实体

```
class User{

    String name;
    String age;
    String sex;
   
    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public String getAge() {
      return age;
    }

    public void setAge(String age) {
      this.age = age;
    }

    public String getSex() {
      return sex;
    }

    public void setSex(String sex) {
      this.sex = sex;
    }
   
    @Override
    public String toString() {
      return "User{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}
```

步骤二:调用接口

```
@PostMapping("testRequestBody")
public String testRequestBody(@RequestBody User user) {
    return user.toString();
}

调用URL:
http://127.0.0.1:8080/testRequestBody
```



## @PathVariable 传参

作用:用于映射URL的占位符

```
@GetMapping("test/{testValue1}")
public String Test(@PathVariable("testValue1") String testValue2) {
   return "传递数据成功,数值为:" + testValue2;
}

对应的调用URL(端口我设置为8080):
http://127.0.0.1:8080/test/1
```

如上所示,通过@PathVariable注解,指定接收的参数,从而实现Restful风格URL。



## @DateTimeFormat 接收时间参数

作用:规范接收时间的时间参数格式

```
@GetMapping("time")
public String timeTest(@DateTimeFormat(pattern="yyyy-MM-dd") Date time){
   return time.toString();
}

对应的调用URL(端口我设置为8080):
http://127.0.0.1:8080/time?date=1997-12-22
```

结果:



## 接收对象

作用:spring会自动把传递的参数和实体内参数对应。

示例:

- 步骤一:创建一个表单,用于发送post请求

```
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:8080/user" method="post">
    <input name="name"><br/>
    <input name="age"><br/>
    <input name="sex">
    <input type="submit" value="提交">
</form>
</body>
</html>
```



- 步骤二:声明一个User对象,用于接收表单提交的数据

```
class User{

    String name;
    String age;
    String sex;
   
    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public String getAge() {
      return age;
    }

    public void setAge(String age) {
      this.age = age;
    }

    public String getSex() {
      return sex;
    }

    public void setSex(String sex) {
      this.sex = sex;
    }
   
    @Override
    public String toString() {
      return "User{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}
```

- 步骤三:controller接收user对象

```
    @PostMapping("user")
    public String testPost(User user){
      return user.toString();
    }
```

最终结果:



只要post传递的参数和User内部的参数相同,spring就会自动对应赋值。如果post传递的参数对象中没有,则为空。

黄hsir 发表于 2021-7-22 16:39

用的最多的@RequestBody丢了

fht000 发表于 2021-7-22 16:44

你是不是还要备注一下,需要用@RestController在类上或者@ResponseBody在方法上啊。要不然你这就是404啊
页: [1]
查看完整版本: SpringBoot · Controller 参数接收方法汇总