SpringMVC04 - 获取请求参数

获取请求携带的三种数据:参数、请求头信息、Cookie

@RequestMapping("/param")
public String getParam(
    @RequestParam(value = "userName", required = true, defaultValue = "hello") String username,
    String password,
    @RequestHeader("referer") String referer,
    @CookieValue("JSESSIONID") String jsessionId
){
    System.out.println("jsessionId:"+jsessionId);
    System.out.println("referer:"+referer);
    System.out.println("username:"+username+",password:"+password);
    return "success";
}

获取参数

获取参数有两种方法,一种是原生ServletAPI,通过请求传递的 HttpServletRequest request,但既然使用了SpringMVC框架,必然有更简便的方法可以使用 -- 注解声明参数

1. 通过控制器方法的形参获取
  • 只需要在控制器方法的形参位置,设置一个形参,形参的名字和请求参数的名字一致即可
2. @RequestParam:将请求参数和控制器方法的形参绑定
  • @RequestParam 注解的三个属性:value、required、defaultValue
  • value : 设置和形参绑定的请求参数的名字
  • **required : **设置是否必须传输value所对应的请求参数,默认值为true,表示value所对应的请求参数必须传输,否则页面报错:400 - Required String parameter 'xxx' is not present
    • 若设置为false,则表示value所对应的请求参数不是必须传输,若为传输,则形参值为null
  • **defaultValue : **设置当没有传输value所对应的请求参数时,为形参设置的默认值,此时和required属性值无关

  • @RequestParam(value = "userName", required = true, defaultValue = "hello") String username,
    String password
    
3. 实体类获取请求携带的参数

请求携带的参数名必须和实体类的属性一致,则控制器会自动将同名的参数填入实体类的属性,方法中直接使用实体类对象

  • 需要在控制器方法的形参位置设置实体类类型的形参,要保证实体类中的属性的属性名和请求参数的名字一致
  • 可以通过实体类类型的形参获取请求参数
@RequestMapping("/param/pojo")
public String getParamByPojo(User user){
    System.out.println(user);
    return "success";
}

获取请求头信息

@RequestHeader:将请求头信息和控制器方法的形参绑定

同样有三个属性,value required defaultValue

  • @RequestHeader("referer") String referer
    

获取Cookie

@CookieValue:将cookie数据和控制器方法的形参绑定

同样有三个属性,value required defaultValue

  • @CookieValue("JSESSIONID") String jsessionId
    

请求参数的乱码问题

表单提交post请求,中文乱码,username=??????

在web.xml中配置过滤所有请求的过滤器,为所有请求设置UTF-8编码

<!--配置Spring的编码过滤器-->
<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>
    <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>

特别注意,SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效

因为设置编码必须在所有请求之前,如果已经有请求发生后再设置编码,则设置无效

posted @   LaViez  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示