方法一:使用HandlerInterceptor
-
定义Interceptor: 实现
HandlerInterceptor接口,然后在preHandle方法中检查请求对象是否实现了Validatable接口,如果实现了就调用validParam方法。java复制 public class ValidationInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; Object bean = handlerMethod.getBean(); if (bean instanceof Validatable) { ((Validatable) bean).validParam(); } } return true; } } -
注册Interceptor: 在Spring配置中注册上面的Interceptor。
java复制 @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new ValidationInterceptor()); } }
方法二:使用@ControllerAdvice与@InitBinder
-
定义全局的
@ControllerAdvice: 利用@InitBinder钩子,在请求绑定到方法参数之后进行验证。java复制 @ControllerAdvice public class GlobalBindingInitializer { @InitBinder public void initBinder(WebDataBinder binder) { Object target = binder.getTarget(); if (target instanceof Validatable) { ((Validatable) target).validParam(); } } }
这个方法的优点是无需在每个控制器方法中显式调用验证逻辑,可以在请求处理流程的早期统一处理验证。