当前位置: 首页 > 知识库问答 >
问题:

如何在spring rest API上处理内部服务器错误(500)以自定义消息?

桂阳文
2023-03-14

我在spring rest api上工作,我想确保一切都正常工作。我想记录异常行为数据库连接错误等等,我正在使用couchbase数据库,并在endpoint响应中获得例如此类异常:CouchBaseQueryExecutionException下一条消息:由于以下n1ql错误无法执行查询:\n{\“msg\”:\“keyspace kids_club上没有与您的查询匹配的索引。使用CREATE index或CREATE PRIMARY index创建索引,或者检查您所需的索引是否联机。\”,\“code\”:4000}和一个非常长的跟踪。

为此,我在internet上找到了一个解决方案,即扩展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似乎是处理和构建给用户的最终消息。有什么办法解决这个问题吗?谢了。

共有1个答案

柴茂材
2023-03-14
@ExceptionHandler(NullPointerException.class)
public final ResponseEntity<Object> handleNullPointerException(NullPointerException ex, WebRequest request) {
    LOGGER.info("Entering into the handleAllException method");
    System.out.println("Exception is : " + ex.getClass());
    ResponseData error = new ResponseData();
    error.setRespCode(HttpStatus.NOT_FOUND.toString());
    error.setRespMessage(ex.getLocalizedMessage());
    error.setTimestamp(LocalDateTime.now());
    return new ResponseEntity(error, HttpStatus.INTERNAL_SERVER_ERROR);



}

请尝试下面的方式来检查您是否能够捕获异常…从sysout中,您将得到确切的异常。然后,您可以使用该异常从该业务逻辑捕获任何特定的异常。

 类似资料:
  • 问题内容: 我正在尝试为这个工作中的项目学习AJAX。我有一个网站加载病人正在服用的药物。 我递归调用此AJAX函数,以便它将附加一个包含单种药物和7天历史记录的新表。我在使代码在FF和IE中执行时遇到问题。在chrome中效果很好。我有显示xmlhttp.status的警报,这是我得到的: xmlhttp.status == 500(内部服务器错误)。 我注释掉了所有递归,因此将其范围缩小到了这

  • 我收到以下错误 内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。 请联系服务器管理员,webmaster@strivemedicare.in并告知他们错误发生的时间,以及可能导致错误的任何行为。 有关此错误的详细信息,请参阅服务器错误日志。 此外,尝试使用错误文档处理请求时遇到 500 内部服务器错误错误。

  • 问题内容: 当使用Java的Youtube API示例将文件上传到youtube时,我得到以下信息: 在此行出现错误: 视频返回视频= videoInsert.execute(); 错误堆栈 这里已经引发了一个相关的问题: https : //code.google.com/p/gdata- issues/issues/detail?id=6352 问题答案: 一两天后自动解决!绝对是API问题。

  • 我一直试图在nginx上安装CakePHP,但我遇到了一个死胡同。尝试访问web根目录时,我收到一个500内部服务器错误。我在我的错误中得到了这个错误。日志: PHP消息:PHP致命错误:require():无法打开required'/var/www/html/test/vendor/autoload。php'(include_path='。:/usr/share/php:/usr/share/p

  • 我想用ajax向laravel中的控制器发送post请求。ajax请求发送两个输入参数,我希望controller在数据库中找到包含第一个参数的列,然后使用第二个输入参数设置name属性。但是我在控制台500中有这个错误消息(内部服务器错误)。 Ajax功能: 路线: 控制器功能: 而且我导入csrf无处不在,因为上次当我做AJAX调用我有这个csrf的问题,下面的代码已经修复了我的问题,但现在不