SpringMVC -- POJO/@RequestParam (3)
2016-03-31 19:07
495 查看
使用POJO对象绑定请求参数值
SpringMVC 会按照请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,支持联级属性.
如dept.deptId , dept.address
继续沿用以前的例子...
创建两个model..
User和Address
Address
然后在控制器中写相对应的调用方法
(最上面一个方法)
index.jsp
然后就可以部署,运行了..
附上截图
//----------------------------------------------------------------------------------------------------------------------------------
SpringMVC通过分析处理方法的签名,将HTTP请求信息绑定到处理方法的相应参数中.
SpringMVC对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名.
必要时 可以对 方法及方法入参 标注相应的注解(@PathVariable,@RequestParam,@RequestHeader等..)
SpringMVC框架会将HTTP请求的信息绑定到相应的方法入参中,并根据方法的返回值类型作出相应的后续处理
使用@RequestParam绑定请求参数
在处理方法入参处使用@RequestParam可以把请求参数传递给请求方法
-value 参数名
-required 是否必须. 默认为true,表示请求参数中必须包含对应的参数,若不存在,抛出异常.
接上面的案例....
直接在index.jsp 模拟发送请求就可以了....
这个不用配置 配置文件
控制器中 写对应的调用方法
上两张图片..
注意:第二行@RequestParam后面的参数类型被修改为Integer
在没写 required=false 的情况下,如果你的age 并没有传入参数..会报500错误....因为默认为true,是必须要传值的
如果你这里写了required=false,就说明 age 这个参数 ,可以传值,也可以不传值...
那问题就来了...
要是你不传值,后台还写个int类型,那也会抛出异常...因为你不传值嘛,那前台传来的就是null..int 和null 不是一个类型嘛....
http://localhost:8088/springmvc/testRequestParam?username=cyx&age=11 http://localhost:8088/springmvc/testRequestParam?username=cyx
如果你前台既不想传值,后台又想用int怎么办呢...
就是下面那个 defaultValue....
将age 的值 默认设置为 0 ....
http://localhost:8088/springmvc/testRequestParam?username=cyx&age=11 http://localhost:8088/springmvc/testRequestParam?username=cyx
SpringMVC 会按照请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,支持联级属性.
如dept.deptId , dept.address
继续沿用以前的例子...
创建两个model..
User和Address
package com.springmvc.model; /** * Created by cyx on 2016/3/31. */ public class User { private String username; private String password; private String email; private int age; private Address address; @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + ", email='" + email + '\'' + ", age=" + age + ", address=" + address + '}'; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } }
Address
package com.springmvc.model; /** * Created by cyx on 2016/3/31. */ public class Address { private String province; private String city; public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } @Override public String toString() { return "Address{" + "province='" + province + '\'' + ", city='" + city + '\'' + '}'; } }
然后在控制器中写相对应的调用方法
(最上面一个方法)
package com.springmvc.test; import com.springmvc.model.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; /** * Created by cyx on 2016/3/31. */ @RequestMapping("/springmvc") @Controller public class SpringMVCTestCode { private static final String SUCCESS = "success"; /** * SpringMVC会按照请求参数名和POJO属性名进行自动匹配. * 自动为该对象填充属性值,支持联级属性 * 如: dept.deptId,address.tel * @param user * @return */ @RequestMapping("/testPojo") private String testPojo(User user) { System.out.println("testPojo:" +user); return SUCCESS; } /** * 了解 * @CookieValue: 映射一个Cookie值,属性同@RequestParam * @param sessionId * @return */ @RequestMapping("/testCookieValue") private String testCookieValue(@CookieValue("JSESSIONID") String sessionId) { System.out.println("testCookieValue sessionId:"+sessionId); return SUCCESS; } /** * @RequestParam 来映射请求参数 * value值,即为请求参数的参数名 * required 该参数是否必须,默认为true * defaultValue 请求参数的默认值 * * required = false * 如果前台传空值的话,会报错误信息.这时候,required就是设置 请求参数中必须包含对应的参数 * 默认为true, false 表示 参数中不一定要包含请求参数 * * @param userName * @param age * @return */ @RequestMapping("/testRequestParam") public String testRequestParam(@RequestParam(value = "username") String userName, @RequestParam(value = "age",required = false , defaultValue = "0") int age) { System.out.println("testRequestParam userName: "+userName +",age: "+age); return SUCCESS; } @RequestMapping("/testRest4/{id}") public String TestRestPUT(@PathVariable Integer id) { System.out.println("TestRestPUT : "+id); return SUCCESS; } @RequestMapping("/testRest3/{id}") public String TestRestDELETE(@PathVariable Integer id) { System.out.println("TestRestDELETE : "+id); return SUCCESS; } @RequestMapping("/testRest2") public String TestRestPost() { System.out.println("TestRestPost"); return SUCCESS; } @RequestMapping(value="/testRest1/{id}",method=RequestMethod.GET) public String TestRestGet(@PathVariable Integer id) { System.out.println("TestRestGet : "+id); return SUCCESS; } }
index.jsp
<%-- Created by IntelliJ IDEA. User: cyx Date: 2016/3/30 Time: 20:09 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title></title> </head> <body> <!-- 模拟发送请求POJO --> <form action="springmvc/testPojo" method="post"> username:<input type="text" name="username"> <br> password:<input type="password" name="password"> <br> email:<input type="text" name="email"> <br> age:<input type="text" name="age"> <br> city:<input type="text" name="address.city"> <br> province:<input type="text" name="address.province"> <br> <input type="submit" value="submit"> </form> <br><br> <a href="springmvc/testCookieValue">testCookieValue</a> <br><br> <a href="springmvc/testRequestParam?username=cyx&age=11">TestRequestParam</a> <br><br> <!-- 模拟Rest风格URL --> <form action="springmvc/testRest4/1" method="post"> <input type="hidden" name="_method" value="PUT"> <input type="submit" value="TestRestPUT"> </form> <br><br> <form action="springmvc/testRest3/1" method="post"> <input type="hidden" name="_method" value="DELETE"/> <input type="submit" value="TestRestDELETE"> </form> <br><br> <form action="springmvc/testRest2" method="post"> <input type="submit" value="TestRestPost"> </form> <br><br> <a href="springmvc/testRest1/1">TestRestGet</a> <br><br> <!-- @PathVariable 映射URL绑定的占位符--> <!-- 带占位符的URL是Spring3.0新增的功能. 通过@PathVariable可以讲URL中占位符参数绑定到控制器处理方法的入参中.. --> <a href="/springmvc/testPathVariable/1">testPathVariable</a> <br><br> <!-- 创建form表单,模拟POST请求 --> <form action="/springmvc/testMethod" method="post"> <input type="submit" value="submit"> </form> <!--这里先模拟一个get请求,因为RequestMapping设置为只接受POST请求,所以不会应答--> <a href="/springmvc/testMethod">testMethod</a> <br><br> <a href="/springmvc/testRequestMapping">@RequestMapping</a> <br><br> <a href="helloworld">HelloWorld</a> </body> </html>
然后就可以部署,运行了..
附上截图
//----------------------------------------------------------------------------------------------------------------------------------
SpringMVC通过分析处理方法的签名,将HTTP请求信息绑定到处理方法的相应参数中.
SpringMVC对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名.
必要时 可以对 方法及方法入参 标注相应的注解(@PathVariable,@RequestParam,@RequestHeader等..)
SpringMVC框架会将HTTP请求的信息绑定到相应的方法入参中,并根据方法的返回值类型作出相应的后续处理
使用@RequestParam绑定请求参数
在处理方法入参处使用@RequestParam可以把请求参数传递给请求方法
-value 参数名
-required 是否必须. 默认为true,表示请求参数中必须包含对应的参数,若不存在,抛出异常.
接上面的案例....
直接在index.jsp 模拟发送请求就可以了....
这个不用配置 配置文件
<%-- Created by IntelliJ IDEA. User: cyx Date: 2016/3/30 Time: 20:09 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title></title> </head> <body> <!-- @RequestParam --> <a href="springmvc/testRequestParam?username=cyx&age=11">TestRequestParam</a> <br><br> <!-- 模拟Rest风格URL --> <form action="springmvc/testRest4/1" method="post"> <input type="hidden" name="_method" value="PUT"> <input type="submit" value="TestRestPUT"> </form> <br><br> <form action="springmvc/testRest3/1" method="post"> <input type="hidden" name="_method" value="DELETE"/> <input type="submit" value="TestRestDELETE"> </form> <br><br> <form action="springmvc/testRest2" method="post"> <input type="submit" value="TestRestPost"> </form> <br><br> <a href="springmvc/testRest1/1">TestRestGet</a> <br><br> <!-- @PathVariable 映射URL绑定的占位符--> <!-- 带占位符的URL是Spring3.0新增的功能. 通过@PathVariable可以讲URL中占位符参数绑定到控制器处理方法的入参中.. --> <a href="/springmvc/testPathVariable/1">testPathVariable</a> <br><br> <!-- 创建form表单,模拟POST请求 --> <form action="/springmvc/testMethod" method="post"> <input type="submit" value="submit"> </form> <!--这里先模拟一个get请求,因为RequestMapping设置为只接受POST请求,所以不会应答--> <a href="/springmvc/testMethod">testMethod</a> <br><br> <a href="/springmvc/testRequestMapping">@RequestMapping</a> <br><br> <a href="helloworld">HelloWorld</a> </body> </html>
控制器中 写对应的调用方法
package com.springmvc.test; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; /** * Created by cyx on 2016/3/31. */ @RequestMapping("/springmvc") @Controller public class SpringMVCTestCode { private static final String SUCCESS = "success"; /** * @RequestParam 来映射请求参数 * value值,即为请求参数的参数名 * required 该参数是否必须,默认为true * defaultValue 请求参数的默认值 * * required = false * 如果前台传空值的话,会报错误信息.这时候,required就是设置 请求参数中必须包含对应的参数 * 默认为true, false 表示 参数中不一定要包含请求参数 * * @param userName * @param age * @return */ @RequestMapping("/testRequestParam") public String testRequestParam(@RequestParam(value = "username") String userName, @RequestParam(value = "age",required = false , defaultValue = "0") int age) { System.out.println("testRequestParam userName: "+userName +",age: "+age); return SUCCESS; } @RequestMapping("/testRest4/{id}") public String TestRestPUT(@PathVariable Integer id) { System.out.println("TestRestPUT : "+id); return SUCCESS; } @RequestMapping("/testRest3/{id}") public String TestRestDELETE(@PathVariable Integer id) { System.out.println("TestRestDELETE : "+id); return SUCCESS; } @RequestMapping("/testRest2") public String TestRestPost() { System.out.println("TestRestPost"); return SUCCESS; } @RequestMapping(value="/testRest1/{id}",method=RequestMethod.GET) public String TestRestGet(@PathVariable Integer id) { System.out.println("TestRestGet : "+id); return SUCCESS; } }
上两张图片..
注意:第二行@RequestParam后面的参数类型被修改为Integer
在没写 required=false 的情况下,如果你的age 并没有传入参数..会报500错误....因为默认为true,是必须要传值的
如果你这里写了required=false,就说明 age 这个参数 ,可以传值,也可以不传值...
那问题就来了...
要是你不传值,后台还写个int类型,那也会抛出异常...因为你不传值嘛,那前台传来的就是null..int 和null 不是一个类型嘛....
http://localhost:8088/springmvc/testRequestParam?username=cyx&age=11 http://localhost:8088/springmvc/testRequestParam?username=cyx
如果你前台既不想传值,后台又想用int怎么办呢...
就是下面那个 defaultValue....
将age 的值 默认设置为 0 ....
http://localhost:8088/springmvc/testRequestParam?username=cyx&age=11 http://localhost:8088/springmvc/testRequestParam?username=cyx
相关文章推荐
- idea编译时报java.lang.OutOfMemoryError: Java heap space异常
- Spring事务Transaction配置的五种注入方式详解
- Eclipse闪退/打不开/无法启动/一闪而过打解决方法
- An error has occurred while drawing:java.lang.IllegalStateException: The display list is not valid.
- 新框架(BSF_JAVA)环境部署个人总结
- Spring Event是什么鬼
- JavaEE_Mybatis_SpringMVC (异步上传)SpringMvc文件上传 通过ajaxupfileload.js
- SPRING IN ACTION 第4版笔记-第十章Hitting the database with spring and jdbc-003-四种方式获取DataSource
- java排序——选择、插入、冒泡、二分法
- Java的数组
- 在Eclipse中进行HotSpot的源码调试--转
- Java编程手册-泛型
- 40多个Java多线程问题的原创总结
- Java String
- Java vs. C#
- Java读取xml文件
- 浅谈java 设计模式——原型模式
- java开发经验分享(四)
- Java调用webservice接口
- Java DES加密解密工具类