RequestMapping注解既可以修饰方法也可以用来修饰类。
类定义处的该注解相对于根目录,而方法定义处的注解相对于类注解,没有类注解时相对于根目录。
要注意的地方时,在类中路径的编写要以”/”开头,而jsp文件中的请求路径不要“/”开头。
RequestMapping注解有很多参数,其中四个比较常用的是
value 请求路径
method 请求方法
params 请求参数
headers 请求头
下面是一个示例
@RequestMapping(value="/headers",method=RequestMethod.POST,
params={"userName","age!=10"},headers={"Accept-Encoding=gzip, deflate, br"})//请求头
public String headers(){
System.out.println("headers");
return "success";
}
如上请求参数中params指定了必须要有userName 和age 两个字段,并且age 不能等于10(age等于直接使用=而不用==),请求头指定了Accept-Encoding必须等于gzip, deflate, br。
总的来说一个@RequestMapping注解可以十分精确的指定可以处理的请求。
另外,@RequestMapping注解还可以支持ant风格的注解,具体包括以下三种情况:
1. ?匹配一个字符 如/user/abc??匹配/user/abcxx
2. *匹配单层任意字符 如/user/*/abc匹配/user/abc/abc
3. **匹配多层任意字符 如/user/**/abc匹配 /user/abc 也匹配/user/abc/abc/abc
最后说一下HiddenHttpMethodFilter
这个Filter可以将请求方法中的POST改为PUT和DELETE。
POST、DELETE、PUT、GET方法分别对应数据库中的增删改查是一种较为合理的处理方式吧,要不然我看的视频里面也不会这么推荐吧,当然也不一定对,请各位大佬推荐。
使用HiddenHttpMethodFilter需要先在web.xml中配置这个Filter具体代码如下:
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern><!-- 过滤全部路径 -->
</filter-mapping>
配置这个之后就可以使用这个Filter了。
其使用方法较为简单,只需要在提交的POST表单里面添加一个隐藏的字段,具体如下:
<form action="xxx/yyy/111" method="post">
<input type="hidden" name="_method" value="PUT">
<input type="submit" value="request put">
</form>
上面的代码请求这个过滤器将一个POST方法改为一个PUT方法,然后在处理的Controller方法中需要加入一个对应请求的处理方法代码便可以运行了,请求处理方法如下:
@RequestMapping(value="/xxx/yyy/{id}",method=RequestMethod.PUT)
public String requestPut(@PathVariable(name="id") Integer id){
System.out.println("PUT");
return SUCCESS;
}
这样就可以对id 对应的信息进行处理了。
注意:TOMCAT8可能会有一个405 - JSPs only permit GET POST or HEAD的错误,原因和解决办法,请参见https://stackoverflow.com/questions/24673041/405-jsp-error-with-put-method
解决办法:在return的字符串前加入”redirect:/”即可。