我试图从SpringBootController抛出一个定制的异常(即400,带有一些错误消息),但它总是抛出500
{
"timestamp": "2021-01-06T17:39:49.648+0000",
"status": 500,
"error": "Internal Server Error",
"message": "invalid xxx",
"path": "/abc/def"
}
我已经创建了一个异常处理程序来处理从控制器调用的服务中抛出的定制异常,该控制器应该返回400。当我调试它的时候,我可以看到它实际上已经被调用了,但是它没有作为响应直接抛出,如果我进行调试,我可以看到basicerrorcontroller仍然会被调用(我认为它不应该被调用,因为我有一个定制的异常处理程序,请纠正我的错误),我可以看到response的状态此时已更改为500,并且我的自定义异常已被此“内部服务器错误” Package
@ControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class RegistrationExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = RegistrationException.class)
protected ResponseEntity<Object> handleRegistrationError(RegistrationException ex){
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
.contentType(MediaType.APPLICATION_JSON)
.body(ex);
}
我已经配置了我的应用程序类来扫描这个处理程序类,我认为它正在工作,因为当服务抛出registrationexception时它将被调用。
在我的服务中,我调用它并将异常级联到控制器throw new registrationexception(“invalid ”);
不知道我哪里做错了。我预计将看到400如下。请告知。谢谢
{
"timestamp": "2021-01-06T17:39:49.648+0000",
"status": 400,
"error": "Bad Request",
"message": "invalid xxx",
"path": "/abc/def"
}
2条答案
按热度按时间wsewodh21#
你应该使用
@ControllerAdvice
在全球范围内@ExceptionHandler
是基于控制器的(cf:spring blog链接到下面基于控制器的异常处理)在全局异常处理中使用spring blog
wsxa1bj12#
这个
@ExceptionHandler
仅适用于@Controller
在教室里。