下面我会为您详细讲解Spring Boot处理异常的五种方式,过程中会包含两条示例。
1. 使用@ControllerAdvice
@ControllerAdvice可以用来捕获Controller抛出的异常,然后做出相应的处理。需要在类上加上注解@ControllerAdvice来表示这是一个异常处理类,然后再配合上@ExceptionHandler注解来处理具体的异常。以下是一个示例:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public Result handleException(Exception e) {
return Result.fail("系统出错了", e.getMessage());
}
}
上面的代码表示了当出现任何一种异常时,都会调用handleException()方法来处理异常,并返回一个Result对象,其中包含了错误信息和异常消息。
2. 使用@ExceptionHandler
@ExceptionHandler可以用来处理控制器方法中抛出的特定异常,确保只有该异常产生时才会调用该方法。以下是一个简单的示例:
@RestController
public class ExceptionController {
@RequestMapping("/exception")
public void exception() throws Exception {
throw new Exception("服务器内部错误!");
}
@ExceptionHandler(Exception.class)
public Result handleException(Exception e) {
return Result.fail("系统出错了", e.getMessage());
}
}
上面的代码表示了当访问/exception路径时,如果出现异常,会调用handleException()方法来处理异常,并返回一个Result对象。
3. 使用@ResponseStatus
@ResponseStatus可以用来指定异常的响应状态码(status code)。方法中需要通过@ResponseStatus注解设置响应码(status属性)和响应原因(reason属性)。以下是一个简单的示例:
@RestController
public class ExceptionController {
@RequestMapping("/exception")
@ResponseStatus(HttpStatus.BAD_REQUEST)
public void exception() throws Exception {
throw new Exception("服务器内部错误!");
}
}
上面的代码表示了当访问/exception路径时,如果出现异常,会返回一个状态码为400(HttpStatus.BAD_REQUEST)的响应。
4. 使用HandlerExceptionResolver
HandlerExceptionResolver是一个已经存在的视图解析器,它可以处理所有的异常。需要实现HandlerExceptionResolver接口并实现其中的resolveException()方法。以下是一个简单的示例:
@Component
public class CustomExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("errorMessage", "系统出错了:"+e.getMessage());
modelAndView.setViewName("error");
return modelAndView;
}
}
上面的代码表示了当出现任何一种异常时,都会调用CustomExceptionResolver来处理异常,并返回一个error视图。
5. 使用ErrorController
ErrorController是Spring Boot提供的以可定制的方式处理全部错误返回信息的接口。需要创建一个自定义的ErrorController类并实现其中的error()方法。以下是一个简单的示例:
@RestController
public class CustomErrorController implements ErrorController {
@RequestMapping("/error")
public Result handleError(HttpServletRequest request) {
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
Exception exception = (Exception) request.getAttribute("javax.servlet.error.exception");
String errorMessage = exception.getMessage();
return Result.fail("系统出错了",errorMessage);
}
@Override
public String getErrorPath() {
return "/error";
}
}
上面的代码表示了当出现任何一种异常时,都会调用CustomErrorController来处理异常,并返回一个Result对象。
希望以上内容可以对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot处理异常的5种方式 - Python技术站