spring mvc参数绑定

来源:互联网 发布:海文网络计划 编辑:程序博客网 时间:2024/05/17 00:01

注解驱动控制器

@RequestMapping映射请求

通过标注@Controller,再通过<context:component-scan>扫描相应类包,即可使POJO成为一个可以处理请求的控制器。

Spring mvc通过@RequestMapping将请求映射到对应的控制器方法中

在控制器的类定义及方法定义处都可以标注@RequestMapping,类定义出提供初步的请求映射信息,方法处提供进一步细分映射信息。

@RequestMapping

Value:指定请求URL,在类定义处指定的URL相对于Web应用部署目录,方法处指定URL相对于类定义处URL,支持ant风格(即?、*、**字符),和带{xxx}占位符的URL.

通过@PathVariable可以将URL中的占位符参数绑定到方法入参中。

如:

@Controller

@RequestMapping(“/owners/{ownerId}”)

Public class RelativePathUriTemplateController{

         @RequestMapping(“/pets/{petId}”)

         publicvoid findPet(@PathVariable String ownderId,@PathVariable petId,Model model){

         ……

}

}

@RequestMapping的value、method、params、headers分别表示请求URL、请求方法、请求参数、及报文头的映射条件,它们之间是与的关系,联合使用多个条件可让请求更精确。

pramas和heads分别通过请求参数及报文头属性进行映射,它们支持简单表达式。

以params为例,headers可以参照prams

parama1:表示请求必须包含名为prama1的请求参数

!parama1:表示请求不能包含param1的请求参数

param1!=value1:表示请求包含名为param1参数,但其值不能为value

{param1=value1,param2}:请求必须包含名为param1和param2参数,并且param1值必须为value1

 

请求处理方法

使用@RequestParam绑定请求参数值

value:参数名

require:是否必须,表示请求必须包含对应参数名,不存在抛异常

public String handler1(@RequestParam(value=”username”,require=false)Stringusername

@RequestParam(“age”)intage){

         ……

}

 

使用@CookieValue绑定请求中的Cookie值

@CookieValue(value=”sessionId”,require=false)StringsessionId

 

使用@RequestHeader绑定请求报文头属性

@RequestHeader(“Accept-Encording”)Stringencording, @RequestHeader(”keep-Alive”)long alive

 

使用命令/表单对象绑定绑定请求参数

Spring mvc 会按请求参数名和命令/表单对象属性名匹配方式,自动为该对象填充属性值。

@RequestMapping(“/handler4”)

public String handler4(User user)

 

使用servlet api对象作为入参

使用servlet api类作为入参时,spring mvc会自动将web层对应的servlet API对象传递给处理方法入参,处理方法入参可同时使用其它符合要求的入参,位置顺序无特殊要求。如果处理方法自行使用HttpServletResponse返回响应,则处理方法返回值需设置成void.

Spring mvc在org.springframework.web.context.request包下提供了若干个可代理Servlet原生API类的接口。如WebRequest、NativeWebRequest,它们允许作为处理类的入参,通过这些代理类可以访问请求对象的任何信息。

public void handler21(HttpServletRequestrequest,HttpServletResponse response){

}

public void handler22(HttpServletRequestrequest,HttpServletResponse response,

@RequestParam(“username”)Stringusername){

}

public String handler25(WebRequest request){

         Stringusername = request.getParameter(“username”);

         ……

}

 

使用IO对象作为入参

Servlet的ServletRequest拥有getInputStream()与getReader()方法,可以通过它们读取请求信息。相应servlet的servletResponse拥有getOutputStream()与getWriter()方法,可以通过它们输出响应信息。

spring mvc 允许控制器处理方法使用java.io.InputStream/java.io.Reader及java.io.OutputStream/java.io.Writer作为方法入参,springmvc将获取ServletRequest相应方法传递给控制器处理方法。

public void handler31(OutputStream os)throwsIoException{

         Resourcerec = new ClassPathResource(“/image.jsp”);

         FileCopyUtils.copy(res.getInputStream(),os);

}

其它类型参数

java.util.Local,java.security.Principal

0 0
原创粉丝点击