SpringMVC--接收前端传递参数的几种方式

 以下示例讲解皆是在Springboot项目下进行

1.@RequestParam注解接收参数

@RequestParam注解的4个属性:

  1. value:请求的参数名,如果不设置,默认为注解后的形参名。
  2. name:由于在源码中,name的别名是value,value的别名是name,所以name等同于value。
  3. required :表示该参数是否为必须,默认值为true,若请求的参数没有该参数,那么就会抛出异常。
  4. defaultValue:表示参数的默认值,如果设置了默认值后,required就直接为false,无论你是否设置了required值。

@RequestParam注解可以接受简单参数类型的传递(这里只的简单参数类型)


例子

    @RequestMapping("/test")
    public void mytest(@RequestParam(required = true) String a,@RequestParam(value =
                     "bb")Integer b,@RequestParam(defaultValue = "test123")String c){
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    }

请求参数:

在这里插入图片描述
由于在 参数b那的RequestParam注解用了Value,把请求参数名改为了bb,且默认required为true,所以会有错误,错误信息如下:
在这里插入图片描述
修改后请求参数:

在这里插入图片描述
结果:
在这里插入图片描述

2.用@RequestBody注解接收参数

@RequestBody注解用来接收传递的Json格式的数据,且加在JAVA的实体类前来接收。一般前端请求的Content-Type为application/json方式。而且请求方式必须为POST。

例子:

实体类 User.java

public class User {
    private Integer id;
    private String nickname;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", nickname='" + nickname +
                '}';
    }

   //GET和SET省略
}

Controller


    @RequestMapping("/test2")
    public void mytest2(@RequestBody User user){
        System.out.println(user.toString());
    }

请求:
在这里插入图片描述

结果:
在这里插入图片描述

3.使用@PathVariable占位符接收

例子:

 @RequestMapping("/test3/{name}/{age}")
    public void mytest3(@PathVariable String name,@PathVariable Integer age){
        System.out.println(name);
        System.out.println(age);
    }

请求:
在这里插入图片描述

结果:
在这里插入图片描述

4.不使用注解,直接在方法中定义参数

不使用注解,直接在方法中定义参数可以实现简单对象(基本数据类型)的接收和复杂对象接收(JAVA对象等)

  1. 如果绑定的对象时简单类型: 调用@RequestParam来处理的。

  2. 如果绑定的对象时复杂类型: 调用@ModelAttribute来处理的。

Tip:无注解接收参数时,前端请求的方式应为x-www-form-urlencoded方式或把参数拼接在链接后面,或为form-data

例子

实体对象 User.java

public class User {
    private Integer id;
    private String nickname;
    private Date asktime;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", nickname=" + nickname +
                '}';
    }
	
	//GET和SET省略
}

Controller:

    @RequestMapping("/test4")
    public void mytest4(User user,String a,String nickname){
        System.out.println(user.toString());
        System.out.println(a);
        System.out.println(nickname);
    }

请求:
在这里插入图片描述

结果:
在这里插入图片描述

如上图所示,接收类型为JAVA对象的时候会把参数自动绑定,只要参数名和对象中的属性名一致即可。简单的基本类型时,也是请求的参数名和方法里的参数名对上即可自动绑定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值