主要知识点
- servlet API获取请求参数用的是
request.getParameter("xxx")
- 在SpringMVC中只需要在处理方法中声明相应名称的参数就可以与请求传入的参数自动匹配,并进行相应的类型转换(servlet API还需要自己进行类型判断)
- 如果类型未匹配/无法匹配会报400错误
- 匹配规则
- 请求参数必须跟处理方法的参数名一致
- 如果处理方法的参数未传入会赋
null
- 如果传入的参数名和处理方法的参数名不一致,可以通过
@RequestParam("xxx")
进行匹配
处理请求参数乱码
GET
在tomcat的server.xml文件中添加URIEncoding="utf-8"
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8" />
POST
配置编码过滤器 CharacterEncodingFilter 解决中文乱码
在SpringMVC的web.xml中添加乱码处理拦截器的配置
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 解决post响应乱码-->
<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>
<!-- <servlet-name>根据servlet名称拦截</servlet-name>-->
</filter-mapping>
@RequestParam 获取请求的参数
@RequestMapping("/hehe")
public String params01(@RequestParam(value = "xxx",defaultValue = "aqin") String name){
System.out.println(name);
return "/index.jsp";
}
- value 重命名参数
- required 指定是否必须传入该参数
- true 默认(不传报400错误)
- false 可以不传(自动传入null),不会报错
- 所以注意!声明函数传入参数时,不要使用基础数据类型,因为基础数据类型无法接收null
- defaultValue 默认值,当传入的参数为null时会自动设置一个默认值(有此参数可以省略
required=false
)
@RequestHeader 获取请求头信息
获取头部Host字段的值
@RequestMapping(value = "/getheader",params = {"username"})
public String params02(@RequestHeader("Host") String host){
System.out.println(host);
return "/index.jsp";
}
获取一个指定key值的cookies
@RequestMapping(value = "/getcookie",params = {"username"})
public String params02(@CookieValue("JSESSIONID") String cookie){
System.out.println("cookie="+cookie);
return "/index.jsp";
}
获取全部的cookie
@RequestMapping(value = "/getcookie",params = {"username"})
public String params03(@CookieValue Map<String,String> cookies){
System.out.println("cookies");
return "/index.jsp";
}
@RequestMapping
@RequestMapping(value = "/heheda",method = {RequestMethod.POST})
public String params02(){
System.out.println("heheda");
return "index.jsp";
}
从spring4.3开始提供了一套简写请求方式的注解:
- @PostMapping(“heheda”)
- 这里的
@RequestMapping(value = "/heheda",method = {RequestMethod.POST})
等同于@PostMapping("/heheda")
- 这里的
- @GetMapping()
- @PutMapping()
- @DeleteMapping()
params:对请求参数进行设置
- 必须要某些参数 params={“username”}
- 必须不要某些参数 params={“!username”}
- 参数必须要等于某值 params={“username=aqin”}
- 参数必须要不等于某值 params={“username!=aqin”}
headers:对请求头进行设置
- 必须包含某个值 headers={“Accept-Language=zh-CN,zh;q=0.9”}
consumes:对当前请求的内容类型进行设置
- 当前请求的内容类型必须为指定值
- 常请求的内容类型:
- application/x-www-form-urlencoded form表单提交的默认内容类型
- multipart/form-data form表单提交文件流的内容类型
- application/json ajax提交的json内容类型
- 请求内容类型不匹配:HTTP Status 415
- consumes={“application/x-www-form-urlencoded”}
通配符
映射的url还可以支持通配符
- ? 一个?可以匹配单个字符(a-z0-9)[1]
- * 一个*可以匹配任意个字符(a-z0-9)[任意个]
- ** **匹配任意个字符任意个层级
//http://localhost/aqin/user/123 会匹配这个
@RequestMapping(value = "/user*")
public String params05(){
System.out.println("*");
return "/index.jsp";
}
//http://localhost/aqin/user/1 会匹配这个
@RequestMapping(value = "/user?")
public String params06(){
System.out.println("?");
return "/index.jsp";
}
//http://localhost/aqin/1/2/3/user/ 会匹配这个
@RequestMapping(value = "/**/user")
public String params07(){
System.out.println("**");
return "/index.jsp";
}
注意:如果映射存在包含关系会优先交给更精确的那个映射处理
无统配符>?>*>**
@PathVariable
用来获取URL目录级别的参数
@RequestMapping("/user/{id}")
public String params04(@PathVariable("id") Integer id){
System.out.println(id);
return "/index.jsp";
}
当请求链接为http://localhost:8080/aqin/user/1012
时函数params04(@PathVariable("id") Integer id)
中的id
就会获取到1012
的值。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135475.html