Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)
warning:
这篇文章距离上次修改已过193天,其中的内容可能已经有所变动。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.example.demo.interceptor.MyInterceptor;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/**") // 拦截所有请求路径
.excludePathPatterns("/login", "/error"); // 排除登录和错误处理路径
}
}
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 在请求处理之前进行调用(Controller方法调用之前)
System.out.println("拦截请求:" + request.getRequestURL());
// 可以进行权限验证、登录状态检查等处理
// 返回true继续请求,返回false中断请求
return true;
}
}
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import javax.servlet.http.HttpServletRequest;
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(Exception.class)
public Object customException(Exception e, HttpServletRequest request) {
// 处理异常,返回自定义错误信息或者调用外部服务记录日志等
System.out.println("异常捕获:" + e.getMessage());
// 返回JSON格式的错误信息
return "{\"message\": \"服务器内部错误\"}";
}
}
以上代码示例展示了如何在Spring MVC中配置拦截器MyInterceptor
,以及如何使用@ControllerAdvice
注解创建全局异常处理器来捕获并处理异常。这些实践是构建健壮Web应用程序的关键部分。
评论已关闭