为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 SpringMVC从入门到精通第六章

SpringMVC从入门到精通第六章

2016.01.28 22:06 6453浏览

今晚陪哥们加班了,说实话这个行业虽然薪资"很高",但实际上加班加点是少不了的,尤其在遇到一个坑的设计专家。一个项目从设计到开发、测试、发布、实施。中间任何一个环节都不能有错误,我个人认为设计是最为重要的,开发是根据设计提出的需求进行开发,要是设计与开发中间表述不清粗,就会导致整个开发周期无限延长。
吐槽完了,言归正传吧。
上一章节,只说了一个知识点就是@PathVariable注解的使用,它能够将URL中的占位符参数,映射到目标方法的参数上。这也是实现restful风格的重要措施。
既然说到了参数,就不得不说一说@RequestParam这个注解,这个注解就是进行参数绑定的。也就是请求参数绑定到目标方法的参数上面。
这个注解有三个属性分别是:

public @interface RequestParam {

    /**
     * The name of the request parameter to bind to.
     */
    String value() default "";

    /**
     * Whether the parameter is required.
     * <p>Default is <code>true</code>, leading to an exception thrown in case
     * of the parameter missing in the request. Switch this to <code>false</code>
     * if you prefer a <code>null</value> in case of the parameter missing.
     * <p>Alternatively, provide a {@link #defaultValue() defaultValue},
     * which implicitly sets this flag to <code>false</code>.
     */
    boolean required() default true;

    /**
     * The default value to use as a fallback. Supplying a default value implicitly
     * sets {@link #required()} to false.
     */
    String defaultValue() default ValueConstants.DEFAULT_NONE;
}

属性说明:
value :值即为请求参数的参数名
required :该参数是否是必须。默认值为true
defaultValue :请求参数的默认值
来看一下案例:在这个请求的URL有三个参数,我在目标方法中分别使用上面的三个属性来演示一下作用

<a href="${pageContext.request.contextPath}/springmvc/testRequestParam?username=hanson.Q&age=25&gender=1">@RequestParam注解知识点:支持将请求参数绑定到目标方法上</a>
/**
     * 
     * @Title: testRequestParam
     * @Description: TODO (测试@RequestParam注解可以将请求参数绑定到目标方法的参数上)
     * @Author: Hanson                
     * @Create Date: 2016年1月28日 下午9:44:50
     * @History: 2016年1月28日 下午9:44:50 Hanson Created.
     *
     * @param username
     * @param age
     * @return
     * 注解说明:@RequestParam
     * value :值即为请求参数的参数名
     * required :该参数是否是必须。默认值为true
     * defaultValue :请求参数的默认值
     */
    @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam("username")String username ,Integer age,@RequestParam(value="gender",required=true,defaultValue="1")String gender){
        System.out.println("目标方法的参数username:"+username+",age: "+age+",gender:"+gender);
        return "success";
    }

输出结果:

一月 28, 2016 9:57:08 下午 org.springframework.web.servlet.FrameworkServlet initServletBean
信息: FrameworkServlet 'springmvc-1': initialization completed in 1335 ms
一月 28, 2016 9:57:08 下午 org.apache.catalina.core.StandardContext reload
信息: Reloading Context with name [/springmvc-1] is completed
目标方法的参数username:hanson.Q,age: 25,gender:1

现在我们去掉url中的gender,然后将默认的参数属性去掉:

@RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam("username")String username ,Integer age,@RequestParam(value="gender",required=true)String gender){
        System.out.println("目标方法的参数username:"+username+",age: "+age+",gender:"+gender);
        return "success";
    }

<a href="${pageContext.request.contextPath}/springmvc/testRequestParam?username=hanson.Q&age=25">@RequestParam注解知识点:支持将请求参数绑定到目标方法上</a>

结果:

HTTP Status 400 - Required String parameter 'gender' is not present
type Status report
message Required String parameter 'gender' is not present
description The request sent by the client was syntactically incorrect.
Apache Tomcat/7.0.42

再试一下默认值属性:

@RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam("username")String username ,Integer age,@RequestParam(value="gender",required=true,defaultValue="1")String gender){
        System.out.println("目标方法的参数username:"+username+",age: "+age+",gender:"+gender);
        return "success";
    }
    <a href="${pageContext.request.contextPath}/springmvc/testRequestParam?username=hanson.Q&age=25">@RequestParam注解知识点:支持将请求参数绑定到目标方法上</a>

运行结果:

信息: Mapped "{[/springmvc/testCustomView],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String hanson.springmvc.handler.Test11_ViewAndViewResolver.testCustomView()
一月 28, 2016 10:03:04 下午 org.springframework.web.servlet.FrameworkServlet initServletBean
信息: FrameworkServlet 'springmvc-1': initialization completed in 1383 ms
一月 28, 2016 10:03:04 下午 org.apache.catalina.core.StandardContext reload
信息: Reloading Context with name [/springmvc-1] is completed
目标方法的参数username:hanson.Q,age: 25,gender:1

另外还有一点要提示一下不知道大家有没有发现,age这个参数没有加这个注解也能映射成功,这是应为springmvc框架支持请求参数和目标方法参数一致的时候可以省略这个注解。
当然大家也可以试一下,参数不一样,并且不加注解。看下出现这种错误,然后就能深入记住这个注解的作用了就是当请求参数和目标方法参数不一致的时候使用这个注解。
2016-1-28

点击查看更多内容
18人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
334
获赞与收藏
3452

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

51篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

151篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消