统一异常处理怎么做

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

统一异常处理

在Java开发中,统一异常处理是一种常见的最佳实践,它可以帮助我们更好地管理和维护代码,同时也提高了程序的健壮性。以下是如何在Spring框架中实现统一异常处理的步骤。

使用@ControllerAdvice

@ControllerAdvice 是Spring 3.2中引入的一个注解,它允许你处理整个应用程序控制器的异常。你可以定义一个或多个类使用这个注解,来处理所有Controller层抛出的异常。

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        // 日志记录
        // 返回统一的异常响应
        return new ResponseEntity<>("An error occurred: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

自定义异常类

你可以创建自定义异常类来表示特定的错误情况。

public class CustomException extends RuntimeException {
    public CustomException(String message) {
        super(message);
    }
    // 可以添加更多的构造函数、方法等
}

然后在GlobalExceptionHandler中添加处理这个自定义异常的方法。

@ExceptionHandler(CustomException.class)
public ResponseEntity<String> handleCustomException(CustomException e) {
    return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
}

使用@ResponseBody

@ControllerAdvice类中,你可以使用@ResponseBody注解来确保异常处理方法返回的是响应体内容,而不是视图名称。

@ExceptionHandler(CustomException.class)
@ResponseBody
public ResponseEntity<String> handleCustomException(CustomException e) {
    return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
}

使用ResponseEntity

ResponseEntity是Spring提供的一个类,它代表了整个HTTP响应的状态码、头信息和体内容。你可以使用它来构建更丰富的响应。

@ExceptionHandler(CustomException.class)
public ResponseEntity<Object> handleCustomException(CustomException e) {
    Map<String, Object> body = new LinkedHashMap<>();
    body.put("timestamp", LocalDateTime.now());
    body.put("status", HttpStatus.BAD_REQUEST.value());
    body.put("error", e.getMessage());

    return new ResponseEntity<>(body, HttpStatus.BAD_REQUEST);
}

结论

通过上述步骤,你可以实现一个简单而强大的统一异常处理机制。这不仅使得代码更加整洁,而且也使得错误处理更加标准化和易于管理。记得在实际应用中根据具体需求调整和完善你的异常处理策略。

最后更新于