java
咱们还能够经过如HttpServletRequest 等API 获得请求数据,但推荐使用注解方式,由于使用起来更简单。咱们须要首先看看功能处理方法支持哪些类型的形式参数,以及他们的具体含义。
一、@RequestParam绑定单个请求参数值;数组
二、@PathVariable绑定URI 模板变量值;安全
三、@CookieValue绑定Cookie 数据值session
四、@RequestHeader绑定请求头数据;app
五、@ModelAttribute绑定参数到命令对象;ui
六、@SessionAttributes绑定命令对象到session;url
@RequestParam绑定单个请求参数值
public String requestparam(@RequestParam("username") String username)
@RequestParam注解主要有哪些参数
value:参数名字,即入参的请求参数名字,如username 表示请求的参数区中的名字为username 的参数的值将传入;
required:是否必须,默认是true,表示请求中必定要有相应的参数,不然将报404 错误码;
defaultValue:默认值,表示若是请求中没有同名参数时的默认值spa
public String requestparam(@RequestParam(value="username“,required=false) String username)
表示请求中能够没有名字为username 的参数,若是没有默认为null,此处须要注意以下几点:原子类型:必须有值,不然抛出异常,若是容许空值请使用包装类代替。Boolean 包装类型类型:默认Boolean.FALSE,其余引用类型默认为null。
对于多个同名请求参数的处理,
例如:url?role=admin&role=user
public String requestparam(@RequestParam(value=“role”) String roles)
实际获得的值是roles=“admin,user”。多个值以逗号的方式隔开
或者把方法参数定义为字符串数组(String[] roles)或集合(List<String> roles)线程
@PathVariable绑定URI 模板变量值
@RequestMapping(value="/users/{userId}/topics/{topicId}")public String test(@PathVariable(value="userId") intuserId, @PathVariable(value="topicId") inttopicId)
如请求的URL 为“控制器URL/users/123/topics/456”,则自动将URL 中模板变量{userId}和{topicId} 绑定到经过@PathVariable注解的同名参数上,即入参后userId=12三、topicId=456。code
@CookieValue绑定Cookie 数据值
public String test(@CookieValue(value="JSESSIONID", defaultValue="") String sessionId)
传入参数类型也能够是javax.servlet.http.Cookie类型。public String test2(@CookieValue(value="JSESSIONID", defaultValue="") Cookie sessionId)
@RequestHeader绑定请求头数据
@RequestMapping(value="/header")public String test(@RequestHeader("User-Agent") String userAgent,@RequestHeader(value="Accept") String[] accepts)
@ModelAttribute绑定请求参数到Model
@ModelAttribute一个具备以下三种使用方式:
做用在方法参数里面:用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,并且自动暴露为模型数据用于视图页面展现时使用;
做用在通常方法上面:该Controller的全部方法在调用前,先执行此@ModelAttribute方法;
做用于方法的返回值上面:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展现时使
public String findUser(@ModelAttribute("user") UserModel user) @ModelAttribute("cityList")public List<String> cityList() { return Arrays. asList("北京", "山东"); } public @ModelAttribute(“user”) UserModel findUser(@ModelAttribute(“user2”) UserModel user)
注:返回值上的user会覆盖方法参数上的user2做为视图的模型名
匿名绑定
public String findUser(@ModelAttribute UserModel user)
Spring Web MVC 会自动将简单类名(首字母小写)做为名字暴露对于集合类型(Collection 接口的实现者们,包括数组),生成的模型对象属性名为“简单类名(首字母小写)”+“ List”
@SessionAttributes绑定对象到session 在控制器上加入@SessionAttributes(value = { “user”}) @SessionAttributes(value = { “user”}) public class SessionAttributeController调用SessionStatus对象的setComplete()销毁当前控制器上使用的Session @RequestMapping("/session2") public String session(@ModelAttribute("user") UserModeluser, SessionStatusstatus) {status.setComplete();return "success";}