吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1495|回复: 3
收起左侧

[Java 转载] SpringBoot · Controller 参数接收方法汇总

[复制链接]
阿里灵灵 发表于 2021-7-22 15:16
本帖最后由 阿里灵灵 于 2021-7-22 17:21 编辑

本篇文章中用于记录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

image.png

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

image.png

@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

image.png

如上所示,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

image.png

@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

结果:

image.png

接收对象

作用: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>

image.png

  • 步骤二:声明一个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();
    }

最终结果:

image.png

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

image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

黄hsir 发表于 2021-7-22 16:39
用的最多的@RequestBody丢了
fht000 发表于 2021-7-22 16:44
你是不是还要备注一下,需要用@RestController在类上或者@ResponseBody在方法上啊。要不然你这就是404啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 14:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表