@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" }
2条答案
按热度按时间mwngjboj1#
我一直在做这个,幸运的是,这很容易。
在整个应用程序中全局执行此操作的最简单/最好方法是定义ExceptionHandler类。该类是一个用
@ControllerAdvice
注解的spring bean,将全局捕获异常并将其转换为标准格式。就像这样:
错误响应类将是这样的:
P.S.你可以像这样用不同的方式处理不同的异常,在某些情况下,你可能想为一个特定的异常抛出一个400错误的请求。你所需要做的就是添加另一个方法,并在
@ExceptionHandler
注解中修改这个异常。...
然后从Angular 来看,您必须检查HTTP响应代码,如果响应代码不成功(例如400,500),您可以读取响应以查看错误消息。
响应看起来像这样。
它可以通过response.message(假设是JavaScript)在angular中读取
jogvjijk2#
我更喜欢上面提到的Rawb的方法:
首先,控制器:
然后创建一个错误响应类(不需要注解):
在angular中,您可以获得正确的状态码(在本例中为409,表示冲突)和您可以轻松处理的消息:
在Baeldung有一个很好的解释:Error Handling for Rest with Spring
和Angular 误差处理:Error Handling with Angular 8