本篇文章中用于记录Controller传参中常用的注解和方法,用于查漏补缺。
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。
作用:规范接收时间的时间参数格式
@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会自动把传递的参数和实体内参数对应。
示例:
<!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 + '\'' +
'}';
}
}
@PostMapping("user")
public String testPost(User user){
return user.toString();
}
最终结果:
只要post传递的参数和User内部的参数相同,spring就会自动对应赋值。如果post传递的参数对象中没有,则为空。