我想知道如何处理Spring数据Rest中的内部服务器错误类型异常,例如由于格式错误的请求或数据库崩溃而导致的JPA异常等。我做了一些研究发现,更好的方法是使用@ControllerAdvice但找不到任何工作的例子。我看了这两个问题,但它们仍然没有答案。
如何处理Spring数据Rest和分页和排序存储库的异常?
静态暴露的sping-data的全局异常处理
有人能帮我举一个使用@ControllerAdvice并在出现异常时向客户端返回自定义错误响应的工作示例吗。
这是我处理所有请求验证错误的方法,
@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、服务或控制器层)并重新抛出MyAppJPAException
。MyAppJPAException
应该有一个自定义消息字段,您应该在重新抛出之前在该字段中设置自定义消息。在MyAppJPAException
处理程序中,您可以设置该消息作为响应,并且可以将HTTP状态设置为-HttpStatus.INTERNAL_SERVER_ERROR
你可以这样做:
@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