在Spring MVC中,拦截器用于在控制器处理请求之前或之后执行某些操作。而异常处理器用于处理控制器中抛出的异常。
以下是创建自定义拦截器和异常处理器的示例代码:
- 自定义拦截器:
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 在请求处理之前执行的代码
return true; // 如果返回false,则停止流程,api不会被调用
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
// 请求处理之后,视图渲染之前执行的代码
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// 整个请求结束之后执行的代码
}
}
- 配置拦截器:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CustomInterceptor());
}
}
- 自定义异常处理器:
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice
public class CustomExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception e) {
ModelAndView mv = new ModelAndView();
mv.addObject("error", e.getMessage());
mv.setViewName("error_page"); // 指定错误页面的视图名称
return mv;
}
}
在以上代码中,首先定义了一个自定义拦截器CustomInterceptor
,然后在WebConfig
配置类中注册了这个拦截器。另外,定义了一个异常处理器CustomExceptionHandler
,它能捕获所有类型的异常并返回一个错误页面的视图。这样,你就可以在Spring MVC应用中使用自定义的拦截器和异常处理器了。