【发布时间】:2020-02-07 07:27:58
【问题描述】:
我正在开发 spring rest api,我想确保一切正常。我想记录异常行为数据库连接错误等,我正在使用 couchbase 数据库,并且我正在获取端点响应,例如这种异常:CouchbaseQueryExecutionException 下一条消息:Unable to execute query due to the following n1ql errors: \n{\"msg\":\"No index available on keyspace kids_club that matches your query. Use CREATE INDEX or CREATE PRIMARY INDEX to create an index, or check that your expected index is online.\",\"code\":4000} 和一个非常很长的痕迹。
为此,我在互联网上找到了一个扩展 ResponseEntityExceptionHandler 并覆盖 handleExceptionInternal 方法的解决方案,如下所示:
@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {
private static String DEFAULT_VALIDATION_ERROR_CODE = "KC-0020";
@ExceptionHandler(MiddlewareException.class)
protected ResponseEntity<ResponseBody> handleKidsClubException(MiddlewareException ex) {
return buildErrorResponse(HttpStatus.valueOf(ex.getHttpStatus()), ex.toError());
}
@ExceptionHandler(ServiceUnavailableException.class)
protected ResponseEntity<ResponseBody> handleServiceUnavailable(ServiceUnavailableException ex) {
return buildErrorResponse(INTERNAL_SERVER_ERROR, ex);
}
@ExceptionHandler(NoSuchElementException.class)
protected ResponseEntity<ResponseBody> handleNoFoundElement(NoSuchElementException ex) {
return buildErrorResponse(NOT_FOUND, ex);
}
@ExceptionHandler(CouchbaseQueryExecutionException.class)
protected ResponseEntity<ResponseBody> handleCouchbaseQueryException(ConstraintViolationException ex) {
return buildErrorResponse(BAD_REQUEST, ex);
}
}
但我无法以这种方式捕获任何类型的内部服务器错误。 似乎 spring 正在处理并向用户构建最终消息。 有什么想法可以解决这个问题吗? 谢谢。
【问题讨论】:
标签: spring-mvc exception