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

Spring数据Rest异常处理 - 返回一般错误响应

楚苏燕
2023-03-14

我想知道如何处理Spring数据Rest中的内部服务器错误类型异常,例如由于格式错误的请求或数据库崩溃而导致的JPA异常等。我做了一些研究发现,更好的方法是使用@ControllerAdvice但找不到任何工作的例子。我看了这两个问题,但它们仍然没有答案。

如何处理Spring数据Rest和分页和排序存储库的异常?

静态暴露的sping-data的全局异常处理

有人能帮我举一个使用@ControllerAdvice并在出现异常时向客户端返回自定义错误响应的工作示例吗。

共有2个答案

昝枫
2023-03-14

这是我处理所有请求验证错误的方法,

@RestControllerAdvice
public class ApplicationExceptionHandler {

     @ExceptionHandler
     @ResponseStatus(HttpStatus.BAD_REQUEST)
     public ResponseBean handle(MethodArgumentNotValidException exception){

        StringBuilder messages = new StringBuilder();
        ResponseBean response = new ResponseBean();

        int count = 1;
        for(ObjectError error:exception.getBindingResult().getAllErrors()){
            messages.append(" "+count+"."+error.getDefaultMessage());
            ++count;
        }

        response.setMessage(messages.toString());
        return response;
    }
}

其中,响应字节是我的应用程序特定类。

对于JPA错误,异常是RuntimeExceptions,顶级异常是-org.springframework.dao。数据访问异常

如果您希望向客户端发送通用消息,则无需在 DAO、服务或控制器层中捕获 - 重新抛出。只需为上述数据访问异常异常添加一个异常处理程序,即可完成此操作。

如果您希望为客户端设置特定异常的特定消息,您需要编写一个扩展DataAccessException的应用程序特定异常层次结构,比如MyAppJPAException。您需要在应用程序代码中捕获-DataAccessException(在DAO、服务或控制器层)并重新抛出MyAppJPAExceptionMyAppJPAException应该有一个自定义消息字段,您应该在重新抛出之前在该字段中设置自定义消息。在MyAppJPAException处理程序中,您可以设置该消息作为响应,并且可以将HTTP状态设置为-HttpStatus.INTERNAL_SERVER_ERROR

薛博艺
2023-03-14

你可以这样做:

@ControllerAdvice(basePackageClasses = RepositoryRestExceptionHandler.class)
public class GenericExceptionHandler {

    @ExceptionHandler
    ResponseEntity handle(Exception e) {
        return new ResponseEntity("Some message", new HttpHeaders(), HttpStatus.BAD_REQUEST);
    }
}
 类似资料:
  • 处理请求的过程中,Spring MVC可能会抛出一些的异常。SimpleMappingExceptionResolver可以根据需要很方便地将任何异常映射到一个默认的错误视图。但,如果客户端是通过自动检测响应的方式来分发处理异常的,那么后端就需要为响应设置对应的状态码。根据抛出异常的类型不同,可能需要设置不同的状态码来标识是客户端错误(4xx)还是服务器端错误(5xx)。 默认处理器异常解析器De

  • 简介 正如大家(应该)知道的,在开发过程中,错误处理 是非常重要的部分。它不仅向使用者表明他/她/它所请求的页面是不可用的, 也是一种透过提供一个 HTTP 错误状态来通知机器 (浏览器等)发生了什幺事情的方式。 程式码错误 FuelPHP 的内部错误处理是基于例外。这可以让你在你的程式码中捕捉它们, 因此你的应用程序可以优雅地处理发生的例外,且使用者可以继续使用应用程序。 FuelPHP 也改变

  • 我有一个Groovy Spring Boot微服务,它返回一个帖子列表。请求进入控制器,控制器调用服务类中的方法,如果没有找到POST,则抛出自定义错误消息。 我已经创建了一个带有@ControllerAdvice注释的控制器,我想截获错误,并创建了一个特定于自定义错误的处理程序。它应该返回一个POJO。目前正在调用ControllerAdvice处理程序,但来自microservice的响应是5

  • 我为运行时可能发生的各种错误创建了多个自定义异常。为此,我使用@ControllerAdvice注释和全局错误处理程序(如下所述:Spring Boot 异常处理。我还在数据库级别实现了约束(如果这很重要,它是一个SQL Server数据库),并且我有一个表,该表具有插入数据时可能引发的两个不同约束。 我现在想做的是在Spring Boot中为数据库级别的每个约束实现自定义异常,这样我就可以向用户

  • 因此,我试图以通用的方式记录spring项目的控制器返回的所有未捕获的异常。我可以使用以下异常处理程序来完成此操作: 但是,对于方法的每次调用,由于方法中抛出的异常,会创建第二个错误日志:代码来自org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolveHandlerMethodExc

  • 当程序出现错误或者异常时,我们一般会希望在开发时输出报错信息,在生产环境时隐藏详细的信息。 在 imi 中,提供了 Http 服务的错误异常默认处理器支持。 默认 Http 错误处理器:Imi\Server\Http\Error\JsonErrorHandler 指定默认处理器 配置文件中: return [ 'beans' => [ 'HttpErrorHan