SpingMVC获取请求参数

1. 通过ServletAPI获取

为控制器方法增加HttpServletRequest参数request,在方法中调用request.getParameter即可,与Servlet类似
eg.
不妨假设前端传入表单,th:action=“/test”(采用thymeleaf命名空间) method=“post”,传入username,password参数。则在控制器方法中

@RequestMapping(value="/test" method=(可以指定,不指定也可以,默认为都包含))
public String getParamByServletApi(HttpServletRequest request){
String username = request.getParameter("username");
String password = request.getParameter("password");
}

2. 通过控制器方法形参传递参数

在控制器方法形参列表中设置与请求参数名字一致的形参即可


@RequestMapping(value="/test" method=(可以指定,不指定也可以,默认为都包含))
public String getParamByServletApi(String username,String password){
//注意一定要一致,包括大小写,否则为null
}

若不一致,增加注解@RequestParam(“请求参数的名字”) 将请求参数与方法形参绑定

@RequestMapping(value="/test" method=(可以指定,不指定也可以,默认为都包含))
public String getParamByServletApi(@RequestParam("username" String userName,String password){

}

@RequestParam

将请求参数与方法形参绑定
包含以下三个属性:

  • value:与形参绑定的请求参数名
  • required:true or false 是否必须传递value的参数
  • defaultValue 当required=false,参数不一定要传,则没有传时为默认值

类似注解
@RequestHeader

将请求头信息与形参进行绑定
属性与RequestParam一致

@CookieValue

将cookie数据与控制器方法的形参绑定
属性与RequestParam一致

综合例子,获取请求参数username,password,请求头信息referer以及cookie

@RequestMapping(value="/test")
public String getParamByServletApi(@RequestParam("username" String userName,@RequestParam("password")String password,@RequestHeader("referer") String referer,@CookieValue("JSESSIONID") String jsessionId){
//body
}

3 通过pojo获取参数

通过控制器方法的实体类类型的形参获取请求参数
需要保证实体类的属性名与请求参数名字一致
如,上述请求参数包含username以及password,用一个实体类封装

public class User{
	private String username;
	private String password;
	//construtor without args
	//construtor with args
	//getter & setter
}
@RequestMapping("/test")
public String getParamByPojo(User user){
	sout(user);//发现请求参数被user接受
}

4 请求参数乱码

请求参数为中文或者其他,可能导致乱码
可以修改tomcat中conf目录下server.xml配置文件中的编码方式
Tomcat8 Get请求方式的乱码问题得到修改,Post请求方式没有

解决方法编码过滤器

Spring提供了编码过滤器CharacterEncodingFilter,将它配置到web.xml中
注意:编码过滤器一定在其他过滤器之前,否则无效

  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!-- 设置请求编码 -->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <!-- 设置为true,使得响应编码也为UTF-8 -->
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值