SpirngMVC 控制器拦截请求非常简单,只需要对控制器方法用@RequestMapping修饰即可
其中@RequestMapping有如下属性可以指定:
- value/path:指定拦截的请求地址
- name:给映射地址指定一个名称
- method:指定拦截的请求类型,支持POST,GET,PUT,DELETE,PATCH,如果不指定则可以修饰所有请求
- consumer:指定请求的类型,比如text/plain,application/*等
- params:指定请求中的必须包含(或者不能包含,在前面加!)的参数,并可以为该参数限定参数值。比如params=“!name”表示参数中不能有name请求参数,params=“name=哈哈哈”表示请求参数name的值必须是哈哈哈
- headers:与params类似,只不过这是用于限定请求头。
- produces:限定Accpet请求类型,如:produces=“test/plain”,表示修饰的目标只处理Accpet请求头包含test/plain的请求。
栗子:
@Controller
@RequestMapping("/user")
public class UserController
{
@Resource(name="userService")
private UserService userService;
@RequestMapping(path = "/login",
method = RequestMethod.POST,
params = "name=lyx",
consumes = "application/x-www-form-urlencoded",
headers = "Referer=http://localhost:8080/_RequestMapping_war_exploded/loginFrom.jsp"
)
public String login(User user, Model model)
{
if (userService.adduser(user)>0)
{
model.addAllAttributes(Map.of("tip","添加用户成功!"));
return "success";
}
model.addAllAttributes(Map.of("tip","添加用户失败!"));
return "error";
}
}
忘了说了,当控制器和控制器方法都用@RequestMapping修饰,并且都指定了value/path属性,那么拦截的请求是两者相加,比如上面栗子中拦截的请求是
user/login