spring mvc参数绑定

本文介绍Spring MVC框架中如何使用@RequestMapping注解实现请求映射,并详细解释了请求参数的绑定方法,包括@RequestParam、@CookieValue、@RequestHeader等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注解驱动控制器

@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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值