SpringMVC的参数传递(Get)

最近自己在做项目的时候,前后端一起做,在发请求时,愣是搞不清楚该怎么传递参数,参数位置到底应该放在哪。所以我决定整理一下SpringMVC的参数传递,相信大家一定遇到过类似的问题。如果能够帮助到你,那是我的荣幸!这里前端使用axios(最常用的请求工具库)来发起请求,文章中还使用到了其他的第三方库,例如qs库,请注意!

 1.Get请求

(1)普通参数接收

1.请求url

http://localhost:8080/api/delete?name=aDong&age=20

2.前端请求代码

<script>
    const request = axios.create({
        baseURL: 'http://127.0.0.1:8080/api',
        timeout: 1000,
    });
    let params = {
        name: 'aDong',
        age: 20
    }
    const res = request.get('/delete', {
        params
    })
</script>

3.后端接收代码


@RestController
@RequestMapping("/api")
public class BasicController {

    @GetMapping("/delete")
    public String getUserName(@RequestParam( "name") String userName, String age) {
        System.out.println("Get 普通参数接收 =>" + userName + " - " + age);
        return "delete:ok";
    }
}

 (2)Pojo参数接收

1.请求url

http://localhost:8080/api/delete?name=aDong&age=20

2.前端请求代码

<script>
    const request = axios.create({
        baseURL: 'http://127.0.0.1:8080/api',
        timeout: 1000,
    });
    let params = {
        name: 'aDong',
        age: 20
    }
    const res = request.get('/get', {
        params
    })
</script>

 3.后端接收代码

@GetMapping("/get")
public String getUserName(User user) {
     System.out.println("Get 普通参数接收 =>" + user.getName() + " - " + user.getAge());
     return "ok";
}

//User类单独放在一个文件里
public class User {

    private String name;

    private Integer age;

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

(3)数组参数接收

1.请求url

http://127.0.0.1:8080/api/get?&likes=a&likes=b&likes=c

2.前端请求代码

<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <!-- 引入qs -->
    <script type="text/javascript" src="https://cdn.bootcss.com/qs/6.7.0/qs.min.js"></script>
</head>

<body>

</body>
<script>
    var qs = Qs
    const request = axios.create({
        baseURL: 'http://127.0.0.1:8080/api',
        timeout: 1000,
    });
    let likes = ['a', 'b', 'c']
    //----第一种方式借助qs库拼接
    //请求路径
    // request.get('/get' + '?' + qs.stringify({ likes }, { arrayFormat: 'repeat' }))//get?likes=a&likes=b&likes=c,正常接收
    // request.get('/get' + '?' + qs.stringify({ likes }, { arrayFormat: 'indicate' }))//get?likes%5B0%5D=a&likes%5B1%5D=b&likes%5B2%5D=c,这种方式后端接收不到参数
    // request.get('/get' + '?' + qs.stringify({ likes }, { arrayFormat: 'brackets' }))//get?likes%5B%5D=a&likes%5B%5D=b&likes%5B%5D=c,这种方式后端也接收不到参数
    // request.get('/get' + '?' + qs.stringify({ likes }, { arrayFormat: 'comma' }))//get?likes=a%2Cb%2Cc,正常接收

    //----第二种方式axios配置,
    request.get('/get', {
        params:{
            likes
        },
        paramsSerializer: function (params) {
            return qs.stringify(params, { arrayFormat: 'repeat' })
        },
    })
</script>

</html>

3.后端接收代码

 @GetMapping("/get")
    public String getUserName(String[] likes) {
        System.out.println("Get 数组参数接收 =>" + Arrays.toString(likes));
        return "ok";
    }

(4)集合参数接收

1.请求url

http://127.0.0.1:8080/api/get?&likes=a&likes=b&likes=c

 2.前端请求代码

<script>
    var qs = Qs
    const request = axios.create({
        baseURL: 'http://127.0.0.1:8080/api',
        timeout: 1000,
    });
    let likes = ['a', 'b', 'c']
    //----第一种方式借助qs库拼接
    //请求路径
    // request.get('/get' + '?' + qs.stringify({ likes }, { arrayFormat: 'repeat' }))//get?likes=a&likes=b&likes=c,正常接收
    // request.get('/get' + '?' + qs.stringify({ likes }, { arrayFormat: 'indicate' }))//get?likes%5B0%5D=a&likes%5B1%5D=b&likes%5B2%5D=c,这种方式后端接收不到参数
    // request.get('/get' + '?' + qs.stringify({ likes }, { arrayFormat: 'brackets' }))//get?likes%5B%5D=a&likes%5B%5D=b&likes%5B%5D=c,这种方式后端也接收不到参数
    // request.get('/get' + '?' + qs.stringify({ likes }, { arrayFormat: 'comma' }))//get?likes=a%2Cb%2Cc,正常接收

    //----第二种方式axios配置,
    request.get('/get', {
        params:{
            likes
        },
        paramsSerializer: function (params) {
            return qs.stringify(params, { arrayFormat: 'repeat' })
        },
    })
</script>

3.后端接收代码

@GetMapping("/get")
    public String getUserName(@RequestParam  List<String> likes) {
        System.out.println("Get 集合参数接收 =>" + likes);
        return "ok";
    }

 (5)JSON参数接收

1.请求url

http://localhost:8080/apihttp://localhost:8080

2.Postman

前端的get和head请求不能携带body参数

大致意思时如果请求方法是GETHEAD ,那么body会被忽略的

但是postman工具是可以的,因为Postman工具没有遵循标准

3.后端接收代码

@GetMapping("/get")
    public String getUserName(@RequestBody  List<String> likes) {
        System.out.println("Get 集合参数接收 =>" + likes);
        return "ok";
    }

 (6)JSON格式POJO参数接收

1.请求url

http://localhost:8080/api/get

2. Postman

3. 后端接收代码

@GetMapping("/get")
    public String getUserName(@RequestBody  User user) {
        System.out.println("Get JsonPojo参数接收 =>" + user.toString());
        return "ok";
    }

(7)JSON格式集合Pojo参数

1.请求url

http://localhost:8080/api/get

2.Postman

 

 3.后端接收代码

@GetMapping("/get")
    public String getUserName(@RequestBody List<User> user) {
        System.out.println("Get JsonPojo参数接收 =>" + user.toString());
        return "ok";
    }

(8)日期类型参数接收(一)

1.请求url

http://127.0.0.1:8080/api/get?date=2024-06-07T04:57:30.596Z

2.前端请求代码

<script>
    const request = axios.create({
        baseURL: 'http://127.0.0.1:8080/api',
        timeout: 1000,
    });
    console.log(Date.now())
    request.get('/get',{
        params:{
            date:new Date()
        }
    } )
</script>

 3.后端接收代码

一定不要忘记加上@DateTimeFormat注解并且一旦使用yyyy-MM-dd 格式,如果传时分秒就会报错,或者是使用 yyyy-MM-dd HH:mm:ss,如果传yyyy-MM-dd 也会报错,有很多的注意点

@GetMapping("/get")
    public String getUserName(@DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {
        System.out.println("Get 日期类型参数接收 => " + date);
        return "ok";
    }

(9)日期类型参数接收(二)

1.请求url

注意与第一个请求url的区别

http://127.0.0.1:8080/api/get?date=2022/12/17 12:00:00

2. Postman

3.后端接收代码

可以不使用注解

@GetMapping("/get")
    public String getUserName(Date date) {
        System.out.println("Get 日期类型参数接收 => " + date);
        return "ok";
    }

 (10)路径参数接收

1.请求url

http://localhost:8080/apihttp://localhost:8080

2.前端请求代码 

<script>
    const request = axios.create({
        baseURL: 'http://127.0.0.1:8080/api',
        timeout: 1000,
    });
    request.get('/get'+ '/aDong/20')
</script>

3.后端接收代码

@GetMapping("/get/{name}/{age}")
    public String getUserName(@PathVariable("name") String userName ,@PathVariable int age) {
        System.out.println("Get 路径参数接收 => " + userName + ":" + age);
        return "ok";
    }

  • 24
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值