Spring MVC拦截器是在请求到达处理器前或返回客户端前执行的组件,它可以用于拦截和处理请求,实现一些通用的功能。
Spring MVC拦截器可以实现的功能包括:
要使用Spring MVC拦截器,需要实现HandlerInterceptor接口,并注册到Spring的上下文中。拦截器可以通过配置匹配的URL路径、排除的URL路径等条件来决定对哪些请求进行拦截。
拦截器的执行顺序由配置的顺序决定,可以通过实现Ordered接口来指定拦截器的顺序。在拦截器的preHandle方法中,可以根据需要进行请求的拦截或处理;在postHandle方法中可以对处理结果做一些处理;在afterCompletion方法中可以进行一些清理工作。
拦截器是Spring MVC框架提供的一种灵活、可扩展的机制,可以在请求处理的各个阶段进行拦截和处理。它可以帮助我们实现一些通用的功能,代码重用性高,提高了开发效率。
拦截器 SpringMVC
过滤器 javaWeb
拦截器使用:1.创建拦截器类
2.添加拦截器
多个拦截器,先声明的优先级高
public class MyInterceptor implements HandlerInterceptor {
//执行handler之前 调用的拦截方法 如登录保护 权限处理等
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("request:"+request+" response:"+response+" handler"+handler);
return true;
}
//执行handler之后 触发的方法 如铭感词汇检查等
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("MyInterceptor.postHandle");
}
//整体处理完毕后 触发的方法
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("MyInterceptor.afterCompletion");
}
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//拦截全部请求
registry.addInterceptor(new MyInterceptor());
}
//方案2.指定地址拦截
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/user/data"); // 模糊地址:/user/*
//*代表任意一层 **代表任意多层
在Spring MVC中,我们可以使用JSR 303(Bean Validation)注解来进行参数校验。JSR 303定义了一组标准的注解,可以用于对Java Bean的属性进行验证。
常用的JSR 303注解包括:
@NotNull:表示属性不能为null。
@NotEmpty:表示字符串不能为空,集合不能为空。
@NotBlank:表示字符串不能为空,且长度必须大于0。
@Size:表示属性的大小必须在指定的范围内。
@Min:表示属性的最小值。
@Max:表示属性的最大值。
@Pattern:表示属性必须匹配指定的正则表达式。
@Email:表示属性必须是一个有效的电子邮件地址。
导入依赖
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>8.0.0.Final</version>
</dependency>
步骤:1.在实体类中添加注解
public class User1 {
@NotBlank
private String name; //不为空
@Length(min=6)
private String password; //长度大于6位
@Min(1)
private int age; //>=1
@Email
private String email; //邮箱格式
@Past
private Date birthday; //过去时间
}
2.handler(@Validated 实体类 实体类对象)
@RestController
@RequestMapping("user1")
public class UserController1 {
@PostMapping("register")
public Object register(@Validated @RequestBody User1 user1, BindingResult result){
//BindingResult 获取错误,绑定错误,不会直接返回
if(result.hasErrors()){
Map data=new HashMap();
data.put("code",400);
data.put("msg","参数错误");
return data;
}
return user1;
}
}