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

Spring boot-自定义rest控制器异常处理HTTP状态

卫嘉言
2023-03-14

我已经为我的spring boot应用程序创建了一个自定义REST控制器异常处理程序。。。

@ControllerAdvice(annotations = RestController.class)
public class RestControllerExceptionHandler {    
  @ExceptionHandler(TechnicalException.class)
  public ResponseEntity handleTechnicalException(TechnicalException e) {    
    return new ResponseEntity<>(
        new RestErrorMessageModel(e.getErrorCode(), e.getMessage()), BAD_REQUEST
    );
  }

  @ExceptionHandler(BusinessException.class)
  public ResponseEntity handleBusinessException(BusinessException e) {    
    return new ResponseEntity<>(
        new RestErrorMessageModel(e.getErrorCode(), e.getMessage()), BAD_REQUEST
    );
  }

  @ExceptionHandler(ValidationException.class)
  public ResponseEntity handleValidationException(ValidationException e) {    
    return new ResponseEntity<>(
        new RestErrorMessageModel(e.getErrorCode(), e.getDetails()), BAD_REQUEST
    );
  }
}

... 我处理验证、业务(由于违反业务规则而导致的异常)和技术(与数据库相关、无效的请求参数等)异常。

异常类有两个参数:errorCode(唯一枚举)和消息(异常详细信息)。

正如您从示例中看到的,对于所有情况,我都会返回BAD_REQUEST(400)状态,这不是最佳做法。

我想知道基于异常类别处理HTTP状态的最佳方法,例如:对于验证错误,返回BAD_请求(400)状态为“OK”。

... 或者有没有办法让spring boot“决定”发送哪个状态码?

共有3个答案

方焱
2023-03-14

您始终可以在Exception和Handler中设置HttpStatus属性,只需获取status的值并在ResponseEntity中配置它。HttpStatus基本上取决于已执行任务的上下文。您的技术或业务异常可以返回400、404、409等。我认为好的解决方案是在抛出合适的异常时定义HttpStatus。如果你不想为每个HttpStatus定义很多异常,你可以使用org。springframework。网状物服务器这是个例外。

钱华晖
2023-03-14

由于错误的类型在应用程序中可能会有所不同,并且不可能为所有这些错误提供通用的HTTP状态,因此我通过创建自定义映射器来解决这个问题,该映射器将错误代码映射到HTTP状态。

由于错误代码是唯一的,它们中的每一个都用于特殊的异常处理,我可以将错误代码映射到Http状态。

昝涛
2023-03-14

来自java

从错误代码的值来看,没有标准。但是你可以:

  • 1xx信息响应-请求收到,继续进程
  • 2xx成功-请求被成功接收,理解并接受
  • 3xx重定向-需要采取进一步的行动来完成请求
  • 4xx客户端错误-请求包含错误语法或无法满足
  • 5xx服务器错误-服务器未能满足显然有效的请求

https://developer.paypal.com/docs/api/reference/api-responses/#http-状态码

https://developer.paypal.com/docs/classic/api/errors/#10000-to-10099

 类似资料:
  • 我试图在我的spring boot应用程序中实现一些自定义异常处理程序,它将能够处理自定义异常并显示批准消息和状态代码。 请帮忙。

  • 我正在使用来自外部API的一些RESTendpoint,为此我正在使用REST模板接口。当我从这些调用中收到某些HTTP状态代码时,我希望能够抛出自定义应用程序异常。为了实现它,我正在实现ResponseErrorHandler接口,如下所示: 最后,这是客户端代码(无关代码省略): 我的应用程序上下文: 我怀疑我没有正确理解此自定义错误处理的行为。每个rest模板方法都可能抛出一个RestCli

  • 我使用的是Nifi 0.4.1版本。我写自定义代码转换CSV到avro格式。我已经创建了类文件,并能够生成nar文件。将nar文件放置在lib目录中,并重新启动nifi服务器。 任何帮助都很感激.. 谢谢,

  • 我有一个spring-boot应用程序,没有任何控制器类。如何为该应用程序编写异常处理程序。用@ControllerAdvice注释的异常处理程序类不起作用。

  • 本文向大家介绍SpringBoot错误处理机制以及自定义异常处理详解,包括了SpringBoot错误处理机制以及自定义异常处理详解的使用技巧和注意事项,需要的朋友参考一下 上篇文章我们讲解了使用Hibernate Validation来校验数据,当校验完数据后,如果发生错误我们需要给客户返回一个错误信息,因此这节我们来讲解一下SpringBoot默认的错误处理机制以及如何自定义异常来处理请求错误。

  • 我想为REST API做自定义异常处理。 这是我掌握的密码。 如何使自定义错误类捕获并显示自定义错误? 谢谢