springboot教程-@RequestParam详解

应用场景

请求中 参数名 与 Controller方法 形参名 不同时,比如:

在前后台分离式开发中,前台页面是由 前端程序员开发的,表单控件名是由 前端程序员命名的,命名为:u_phoneu_pwd

后台程序员编写 Controller 时,方法的 形参名不能是:u_phoneu_pwd,因为 不符合 java命名规范,形参为:phonepassword

此时,前端 请求中的 参数名Controller方法的形参名 不匹配,就需要用该注解,使之匹配上

源码

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
    @AliasFor("name")
    String value() default "";

    @AliasFor("value")
    String name() default "";

    boolean required() default true;

    String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}

@Target({ElementType.PARAMETER}) 可知,只能声明形参

value属性

请求中的参数名。表示将请求中该参数的值,传给 声明的形参

只用该属性时可省略;当用多个属性时,不能省略

支持的数据类型

  • 基本数据类型、字符串
  • javabean
  • 数组
  • 集合。如:List、Map等

例子

html 代码

手机号:<input type="text" id="u_phone" /><br>
密码:<input type="password" id="u_pwd" /><br>
<input type="button" value="登录" onclick="doLogin()"/>
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
    function doLogin(){
        var u_phone=$("#u_phone").val();
        var u_pwd=$("#u_pwd").val();
        $.ajax({
            url:'doLogin',
            type:'post', //使用post方法
            dataType:'json',//服务器端返回的数据格式是json
            data: {
                "u_phone":u_phone,
                "u_pwd":u_pwd
            },//发给服务器端的数据
            success:function(data){   //data:服务器端返回给浏览器端的数据
                if(data.code==0){
                    alert("登录成功,跳转首页!");
                    // location.href='index.html';
                }else{
                    alert(data.msg)
                }
            },
            error:function (XMLHttpRequest, textStatus, errorThrown) {
                alert(XMLHttpRequest);
                alert(textStatus);
                alert(errorThrown);
            }
        });
    }
</script>

Controller 代码

@RestController
public class LoginCtrl {
    @RequestMapping("/doLogin")
    public JsonResult login(@RequestParam("u_phone") String phone,@RequestParam("u_pwd") String password){
        System.out.println(phone+"-"+password);
        JsonResult jr=new JsonResult(0,"登录成功!");
        return jr;
    }
}

name 属性

等同于 value 属性

required 属性

表示 请求中,是否必须存在该参数名,默认为true,表示 必须 存在,否则 报错

由于 Controller中使用 @RequestParam("u_phone") ,默认 required=true ,那么前台页面 必须提供 u_phone 参数,该参数可以是 空值,但必须得有此参数,没有此参数会报错

如下: 直接访问该Controller,没有参数,报错如下图:
在这里插入图片描述

如果设置 required = false ,即:@RequestParam(value = "u_phone",required = false),前端发请求没有提供 u_phone 参数,也不会报错

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值