spring 在Angular应用程序中显示Sping Boot 异常

bnl4lu3b  于 2023-04-19  发布在  Spring
关注(0)|答案(2)|浏览(139)

我正在用Sping Boot 和Angular开发应用程序,我将如何在Angular应用程序中显示异常

mwngjboj

mwngjboj1#

我一直在做这个,幸运的是,这很容易。
在整个应用程序中全局执行此操作的最简单/最好方法是定义ExceptionHandler类。该类是一个用@ControllerAdvice注解的spring bean,将全局捕获异常并将其转换为标准格式。
就像这样:

@ControllerAdvice
public class JsonExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ResponseEntity<Object> handleAllOtherErrors(Exception exception) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                .contentType(MediaType.APPLICATION_JSON)
                .body(new ErrorResponse(exception.getMessage()));
    }

}

错误响应类将是这样的:

public class ErrorResponse {

    private String message;

    public ErrorResponse(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

P.S.你可以像这样用不同的方式处理不同的异常,在某些情况下,你可能想为一个特定的异常抛出一个400错误的请求。你所需要做的就是添加另一个方法,并在@ExceptionHandler注解中修改这个异常。
...
然后从Angular 来看,您必须检查HTTP响应代码,如果响应代码不成功(例如400,500),您可以读取响应以查看错误消息。
响应看起来像这样。

{
  "message": "Your exception message"
}

它可以通过response.message(假设是JavaScript)在angular中读取

jogvjijk

jogvjijk2#

我更喜欢上面提到的Rawb的方法:
首先,控制器:

@ControllerAdvice
public class ExceptionController extends ResponseEntityExceptionHandler{

  @ExceptionHandler(UsernameNotFoundException.class)   
  public ResponseEntity<?> handleUsernameNotFoundExceptions(UsernameNotFound ex){
    Map<String, String> errors = new HasMap<>();
    errors.put("message", ex.getMessage());
    return new ResponseEntity<>(errors, HttpStatus.CONFLICT);
   }
  }

然后创建一个错误响应类(不需要注解):

public class UsernameNotFoundException extends RuntimeException {
   public UsernameNotFoundException(String username) {
    super("Can't find user with this username: " + username);
   }
 }

在angular中,您可以获得正确的状态码(在本例中为409,表示冲突)和您可以轻松处理的消息:

{ "message": "Can't find user with this username: username" }

在Baeldung有一个很好的解释:Error Handling for Rest with Spring
和Angular 误差处理:Error Handling with Angular 8

相关问题