Spring MVC的@RequestParam注解使用

当时用@RequestMapping注解class和method时,与url对应的方法可以是任意类型的方法,如:方法名任意(不考虑一些关键字的情况)、参数任意、可以没有返回值等等。通过浏览器传递的参数可以将key与方法的形参名完全对应,得到浏览器传递到服务器的值;如果不对应也是可以得到的,此时就需要使用@RequestParam注解;但在使用@RequestParam注解时需要注意一个问题:@RequestParam注解的required属性设置,该属性值默认为true,但有时需要配置为false来避免400错误。

@Controller
@RequestMapping("/demo/")
public class HelloController {

    @RequestMapping("hello.do")
    public String execute(String username, String password) {
        System.out.println("hello spring");
        System.out.println(username);
        System.out.println(password);
        return "hello";
    }

}

浏览器的请求调用这个方法时,可以传username、password的参数也可以只传其中的一个参数(key与形参名要一致),甚至可以不传参数。以上情形都可以正常调用这个方法。

但是,当使用@RequestParam来解决key与形参名不一致的问题时,如果没有指定required属性值,且在浏览器访问时也没有传递被@RequestParam注解的形参时,就会发生400错误。

@Controller
@RequestMapping("/demo/")
public class HelloController {

    @RequestMapping("hello.do")
    public String execute(String username, @RequestParam(value="pwd")String password) {
        System.out.println("hello spring");
        System.out.println(username);
        System.out.println(password);
        return "hello";
    }

}

此时,如果不传key为pwd的参数,就会报400:HTTP Status 400 - Required String parameter 'pwd' is not present.即使传递的是key为password的参数时,也不能正常调用这个方法;如果在使用@RequestParam注解时,依然希望像未使用此注解时,可以在任何情况下都能正常调用该方法(不传参或只传其中任一参数时),就需要添加required=false。

@Controller
@RequestMapping("/demo/")
public class HelloController {

    @RequestMapping("hello.do")
    public String execute(String username, @RequestParam(value="pwd", required=false)String password) {
        System.out.println("hello spring");
        System.out.println(username);
        System.out.println(password);
        return "hello";
    }

}

此时,就可以像不使用@RequestParam注解时一样调用这个方法,如果传递的key为password,也可以正常调用这个方法,但方法的形参password依然为null,只有key为pwd时,才可以将值正确的传递给password形参。

转载于:https://www.cnblogs.com/domost/p/10263202.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值