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

Spring Boot覆盖默认REST异常处理程序

吕新
2023-03-14

我无法覆盖REST API中默认的Spring Boot错误响应。我有以下代码

@ControllerAdvice
@Controller
class ExceptionHandlerCtrl {

    @ResponseStatus(value=HttpStatus.UNPROCESSABLE_ENTITY, reason="Invalid data")
    @ExceptionHandler(BusinessValidationException.class)
    @ResponseBody
    public ResponseEntity<BusinessValidationErrorVO> handleBusinessValidationException(BusinessValidationException exception){
        BusinessValidationErrorVO vo = new BusinessValidationErrorVO()
        vo.errors = exception.validationException
        vo.msg = exception.message
        def result =  new ResponseEntity<>(vo, HttpStatus.UNPROCESSABLE_ENTITY);
        result

    }

然后在我的REST api中抛出这个BusinessValidationException。这个处理程序被调用(我可以在调试器中看到它),但是我仍然得到缺省的Spring BootREST错误消息。是否有一种方法可以重写并仅将default用作后退?带有Groovy的Spring Boot版本1.3.2。最诚挚的问候

共有1个答案

於意蕴
2023-03-14

从方法中删除@responsestatus。它会产生一个不希望的副作用,您不需要它,因为您正在ResponseEntity中设置HttpStatus.unprocessable_Entity

responsestatus上的JavaDoc:

警告:在异常类上使用此批注时,或设置此批注的reason属性时,将使用HttpServletResponse.SenderRor方法。

 类似资料:
  • 主要内容:Spring Boot 默认异常处理机制,Spring Boot 异常处理自动配置原理在日常的 Web 开发中,会经常遇到大大小小的异常,此时往往需要一个统一的异常处理机制,来保证客户端能接收较为友好的提示。Spring Boot 同样提供了一套默认的异常处理机制,本节将对它进行详细的介绍。 Spring Boot 默认异常处理机制 Spring Boot 提供了一套默认的异常处理机制,一旦程序中出现了异常,Spring Boot 会自动识别客户端的类型(浏览器客户端或机器客户端)

  • 有没有纯注解为Spring留档?我看到的90%的文档都是为xml实现编写的。 我正在尝试覆盖默认的JobLauncher以能够传递JobParameters,但我添加到下面代码中的任何JobLauncher函数都被忽略,而是运行默认的SimpleJobLauncher。 我想用4个不同的作业参数启动同一作业的4个并发实例。这些参数应该告诉读取器从哪个目录读取。 我可以使用@Value注释为目录传递

  • 我不熟悉java、Junit和jacoco。我正在做下面的异常处理。我也在捕获异常类,以防该方法抛出之前未捕获的任何其他异常。 在Junit测试中,尝试如下。当我有运行时的任何异常时,我抛出的总是运行时异常捕获块本身,除非我抛出异常。我可以尝试其他哪个选中的异常,使其进入异常捕获块。因此,我无法获得所需的代码覆盖率。 谢谢你的帮助。

  • 我想覆盖服务器faces web应用程序中的默认Hibernate验证程序消息,因此我阅读了这部分文档:https://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html/chapter-message-interpolation.html#section-消息插值 我在文件夹中创建了两个文件:和。文件内容为: 我使用的是德语版本

  • 问题内容: 我已经能够覆盖所有名称以“ android:”为前缀的主题,但是Android themes.xml还定义了似乎无法被覆盖的属性。例如: colorTheground是在Theme.Light xml中定义的,但是在此处添加它可以使我 错误。如何为整个应用程序覆盖该样式? 问题答案: 您可以用修改属性(如)的方式覆盖标准属性,只是不要忘记添加如下前缀:

  • 问题内容: 我想覆盖Java外观。我只想显示不同的按钮。 我想要Windows Look and Feel的所有功能,但仅按钮有所不同。希望你明白我的意思。 还告诉我如何制作圆形的JtabbedPane ??? 问题答案: 自定义GUI类 调用您的自定义GUI类