首页 > 编程语言 > 详细

四、Spring MVC的RequestParam注解

时间:2017-03-10 22:42:53      阅读:290      评论:0      收藏:0      [点我收藏+]

    前面的章节,有提到可以通过@PathVariable注解来映射restful风格的url中的值到方法中去,本章就看看如果不使用restful风格的url来怎么进行参数的传递。

    RequestParam就是来实现参数传递的,能够把用户的输入绑定到后台的方法上面。它有三个主要的属性:

value:定义参数的名称

required:定义参数是否是必须的,默认是true

defaultValue:定义参数的默认值

    下面结合具体的示例代码来看一下如何使用:

1、下面的这段代码定义了三个参数,一个name,一个sex,一个age,可以看出来以下两种方式是等价的,它们的作用是一样的

@RequestParam("name") String userName
@RequestParam(value = "name") String userName

2、参数的绑定是name,而不是userName,即如果传递的参数名称为userName,那么就不能接收到参数

@RequestMapping("/testReqParam")
public String testRequestParam(@RequestParam("name") String userName, 
                     @RequestParam("sex") String sex,
            @RequestParam(value = "age") int age, Model model) {

    model.addAttribute("name", userName);
    model.addAttribute("sex", sex);
    model.addAttribute("age", age);
    return "result";
}


测试代码:下面定义了三个请求,第一个完整参数,get请求,第二个完整参数post请求,第三个缺少参数age。前两个都会成功,最后一个会404的,因为required的默认值是true

<p>RequestParam测试,get请求形式
 <a href="/testRequestParam/testReqParam?name=lxy&sex=male&age=15">here</a>
 </p>

<form action="/testRequestParam/testReqParam" method="post">
    <p>post请求形式</p>
    name:<input type="text" name="name" value=""/><br/>
    sex:<input type="text" name="sex" value=""/><br/>
    age:<input type="text" name="age" value=""/><br/>
    <input type="submit" value="submit" />
</form>
<p>RequestParam测试,get请求形式,缺少age参数,出现404
 <a href="/testRequestParam/testReqParam?name=lxy&sex=male">here</a>
</p>

3、required属性定义,直接这么定义会不会出问题,答案是会的,会出现500错误。为什么?因为age参数是null,在spring mvc在进行类型转换的时候,null不能转为int类型,那要怎么办呢?

@RequestMapping("/testAttrRequired500Error")
public String testAttrRequired500Error(@RequestParam("name") String userName, 
    @RequestParam("sex") String sex,
    @RequestParam(value = "age", required = false) int age, Model model) {

    model.addAttribute("name", userName);
    model.addAttribute("sex", sex);
    model.addAttribute("age", age);
    return "result";
}


这一段代码把int修改为了Integer,此时无论是否缺少age参数都是可以成功的。

@RequestMapping("/testAttrRequired")
public String testAttrRequired(@RequestParam("name") String userName, 
@RequestParam("sex") String sex,
@RequestParam(value = "age", required = false) Integer age, Model model) {

    model.addAttribute("name", userName);
    model.addAttribute("sex", sex);
    model.addAttribute("age", age);
    return "result";
}

测试代码

<p>required属性设为false,500错误的定义形式,参数转化错误
    <a href="/testRequestParam/testAttrRequired500Error?name=lxy&sex=male">here</a>
</p>

<p>required属性设为false,缺少参数age 不会出错,因为定义类型为Integer
    <a href="/testRequestParam/testAttrRequired?name=lxy&sex=male">here</a>
</p>

4、defaultValue的使用,定义参数的默认是,如果没有传递该参数,使用此处定义的,此时即使缺少age参数,也不会出现错误了,因为会使用0来作为age的值。

@RequestMapping("/testAttrDefaultValue")
public String testAttrDefaultValue(@RequestParam("name") String userName,
        @RequestParam("sex") String sex,@RequestParam(value = "age",
        required = false, defaultValue = "0") int age, Model model) {

    model.addAttribute("name", userName);
    model.addAttribute("sex", sex);
    model.addAttribute("age", age);
    return "result";
}

测试代码

<p>required属性设为false,设置defaultValue为0,缺少age参数也不会出错,
因为给定了一个默认值,按照该值进行转换
    <a href="/testRequestParam/testAttrDefaultValue?name=lxy&sex=male">here</a>
</p>

5、RequestHeader和CookieValue的使用,不太会用到,和RequestParam用法一致,示例代码如下所示:

/**
 * 注解 @RequestHeader 可以定义获取请求头的信息
 * 注解 @CookieValue 可以定义获取请求的cookie中的值
 */
@RequestMapping("/testRequestHeaderAndCookieValue")
public String testRequestHeader(@RequestHeader("Accept-Language") String language,
    @CookieValue("JSESSIONID") String sessionId, Model model) {

    System.out.println("header:" + language + "\tsessionId:" + sessionId);
    return "result";
}

测试代码:

<p>@RequiredHeader和@CookieValue的使用说明:
    <a href="/testRequestParam/testRequestHeaderAndCookieValue">here</a>
</p>


项目源代码:

https://git.oschina.net/acesdream/spring-mvc


本文出自 “艾斯的梦想” 博客,请务必保留此出处http://acesdream.blog.51cto.com/10029622/1905244

四、Spring MVC的RequestParam注解

原文:http://acesdream.blog.51cto.com/10029622/1905244

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!