Spring Boot错误处理机制以及自定义异常处理详解
1. Spring Boot错误处理机制
Spring Boot的错误处理机制主要是基于Spring MVC框架提供的异常处理机制进行封装扩展的,并通过@ControllerAdvice注解标注的类的统一异常处理方法对异常进行处理。
Spring Boot提供了两种常见的异常处理方式:
1.1 @ExceptionHandler注解
@ControllerAdvice注解的类中定义了一个或多个@ExceptionHandler注解的方法来处理相应的异常。这些方法具有以下特点:
- 方法参数可以自定义,但第一个参数必须为throwable类型的异常
- 可以向model中添加属性
- 可以添加@ResponseBody注解返回JSON格式数据
以下是一个示例:
@ControllerAdvice
@ResponseBody
public class ExceptionHandle {
@ExceptionHandler(value = Exception.class)
public Map<String, Object> handle(Exception e) {
Map<String, Object> map = new HashMap<>();
map.put("code", HttpStatus.INTERNAL_SERVER_ERROR.value());
map.put("msg", e.getMessage());
return map;
}
}
1.2 ErrorController接口
Spring Boot提供了ErrorController接口,可以用来处理所有未被处理的异常。该接口的实现类主要包含以下几个方法:
- String getErrorPath():返回处理异常的URL路径
- ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response):处理HTML异常
- ResponseEntity
以下是一个示例:
@RestController
public class MyErrorController implements ErrorController {
private static final String PATH = "/error";
@RequestMapping(value = PATH)
@ResponseBody
public Object error(HttpServletRequest request) {
Map<String, Object> map = new HashMap<>();
map.put("code", request.getAttribute("javax.servlet.error.status_code"));
map.put("msg", request.getAttribute("javax.servlet.error.message"));
return map;
}
@Override
public String getErrorPath() {
return PATH;
}
}
2. 自定义异常处理
Spring Boot允许我们自定义一些异常,并在处理异常时返回自定义的错误信息。自定义异常通常需要继承RuntimeException或其子类。
以下是一个自定义异常的示例:
public class MyException extends RuntimeException {
private int code;
private String msg;
public MyException(int code, String msg) {
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
对于自定义异常的处理,我们需要在@ControllerAdvice注解的类中定义相应的异常处理方法。以下是一个示例:
@ControllerAdvice
@ResponseBody
public class ExceptionHandle {
@ExceptionHandler(value = MyException.class)
public Map<String, Object> handle(MyException e) {
Map<String, Object> map = new HashMap<>();
map.put("code", e.getCode());
map.put("msg", e.getMsg());
return map;
}
}
当出现自定义的异常时,Spring Boot会优先匹配到自定义异常处理方法进行处理,返回自定义的错误信息。
示例说明:
假设我们有一个UserController类,其中定义了一个/login接口,用于登录,如果用户登录失败,则抛出自定义的MyException异常。
@RestController
public class UserController {
@RequestMapping(value = "/login")
public void login() {
throw new MyException(1001, "用户名或密码错误!");
}
}
当用户在前端进行登录时,如果登录失败,则会返回自定义的错误信息。
3. 总结
Spring Boot的错误处理机制可以有效地处理我们代码中出现的异常,避免将异常抛到前端。自定义异常处理则可以让我们更灵活地处理异常,并返回自定义的错误信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot错误处理机制以及自定义异常处理详解 - Python技术站