除了使用注解的方式配置全局异常处理器外,还可以通过实现HandlerExceptionResolver
接口来配置全局异常处理器。
以下是具体步骤:
一、创建自定义异常处理器类
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class CustomExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView modelAndView = new ModelAndView();
if (ex instanceof NullPointerException) {
modelAndView.setViewName("error/null_pointer"); // 可以指向一个特定的错误页面视图名
modelAndView.addObject("errorMessage", "发生了空指针异常:" + ex.getMessage());
} else if (ex instanceof IllegalArgumentException) {
modelAndView.setViewName("error/invalid_argument");
modelAndView.addObject("errorMessage", "发生了非法参数异常:" + ex.getMessage());
} else {
modelAndView.setViewName("error/general");
modelAndView.addObject("errorMessage", "发生了未知异常:" + ex.getMessage());
}
try {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex.getMessage());
} catch (IOException e) {
e.printStackTrace();
}
return modelAndView;
}
}
二、注册自定义异常处理器
- 在 Spring Boot 的配置类中,可以通过以下方式注册自定义的异常处理器:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Bean
public HandlerExceptionResolver customExceptionResolver() {
return new CustomExceptionHandler();
}
}
通过这种方式,可以灵活地处理不同类型的异常,并可以根据需要返回特定的视图或 JSON 响应。同时,可以对异常进行更精细的处理和记录日志等操作。