问题标签 [controller-advice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
207 浏览

java - 在 Spring Boot 中处理异常的最佳方法是什么?

我正在 Spring Boot 中开发一个应用程序。我想知道处理异常的最佳方法是什么。所以以下是我的代码,

ExceptionHandler.java 我正在使用@ControllerAdvice. 什么是最好用的?@ControllerAdvice还是@RestControllerAdvice

并实现服务层@Service如下,

Controller.java代码如下,

所以我的问题是:

上述方法不好吗?可以在服务层抛出异常并且它会自动捕获@controlleradvice吗?还是只需要在控制器中抛出?我正在寻找处理异常的最佳实践。

0 投票
1 回答
88 浏览

java - @controlleradvice 给出错误:范围“会话”对于当前线程不是活动的

我面临 Spring mvc 注释@Controlleradvice的问题。我有 2 个控制器类:UserGapsControllerRegistrationBaseController 两个类都使用

  1. @控制器
  2. @Controlleradvice
  3. @Autowired 会话对象
  4. @Scope(WebApplicationContext.SCOPE_SESSION)

在方法级别使用@Modelattribute时,必须使用@Controlleradvice 注释。所以我在两个类中都有一个用@Modelattribute 注释的方法。现在的问题是,当我在 UserGapsController.java 中使用 @Controlleradvice 时,应用程序运行良好,当我在 RegistrationBaseController.java 中也使用 @Controlleradvice 时,它​​在运行时出现以下错误:

创建名为“org.springframework.web.servlet.mvc.method.annotation.requestmappinghandler”的bean时出错:调用init方法失败:嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建名为“userGapsController”的bean时出错:范围“会话”对当前线程无效

这个错误的原因是什么,我们不能有 2 个 @Controlleradvice 注释类吗?当我在 RegistrationBaseController.java 中评论 @Controlleradvice 时,它​​执行得很好。

0 投票
0 回答
41 浏览

java - Spring Web:控制器建议

我有一个简单的类来捕获一些这样的异常:

然后我可以抛出新的 RuntimeException 并且可以在控制台中看到输出日志。

它做得很好,但我必须将 RestResponseEntityExceptionHandler.class 作为 lib 移动到另一个项目,并像 pom.xml 中的 maven 依赖项一样添加它。

同样在主项目中添加了扩展移动的 ControllerAdvice:

之后它不起作用。我有下一个例外:

org.springframework.context.NoSuchMessageException:在语言环境“ru_RU”的代码“描述”下找不到消息。

当 RestResponseEntityExceptionHandler 在主项目中时,我有了下一个 bean 定义:

在“资源”文件夹中,我有messager_ru.properties文件。我也移动了 messageSource bean 配置和属性文件。

也许关键是我将所有这些移到的项目是一个库(没有主要功能)?

0 投票
0 回答
24 浏览

spring-boot - 何我可以使特定异常的 ExceptionHandler 代码工作,而不是使用 @ControllerAdvice 处理“异常”的代码

我在 Spring Boot 项目中使用 @ControllerAdvice 来处理 Stripe 的卡异常,但是每次抛出此异常时,处理异常的代码都会起作用,而不是处理特定卡异常的代码。

这就是我正在做的:

“这是引发异常的 Api - 输入错误卡详细信息时出现 CardException”

“这是我的 Exeption 处理类代码”

0 投票
1 回答
254 浏览

java - Spring ControllerAdvice 不返回响应正文?

我有以下ControllerAdvice处理JsonParseException(我使用 Spring 和 Jackson)

出于某种原因,当我向服务器发送错误的 json 请求时它不起作用,只返回 400。当我更改 时HttpStatus,它仍然返回 400,所以看起来建议并没有真正运行。

0 投票
0 回答
94 浏览

spring - 我的springboot应用程序中没有触发ControllerAdvice?

实际上,我正在使用 Spring Boot 在 Kafka 流应用程序中工作。

所以在这里我试图使用全局处理异常,@ControllerAdvice但它对我不起作用。

是否可以@ControllerAdvice在我的应用程序中使用。

此控制器建议是否仅在错误来自控制器时才有效。

注意:我的应用程序中没有任何控制器/休息控制器端点。

我们可以通过其他方式达到同样的效果吗?

请分享您宝贵的想法!

主流:

变压器类:

控制器建议:

0 投票
0 回答
298 浏览

java - ControllerAdvice 不处理某些异常

经过几天的浏览,我没有找到解决方案,所以我想我会发布。马上,对不起我的英语。

我正在尝试使用 Jhipster 的技术堆栈(Spring MVC、JPA 等)从在 Java 中运行的后端获取自定义异常到我的前端。在某些情况下,我创建了自定义异常,使用我在 Jhipster 生成的 ControllerAdvice 中添加的自定义处理程序处理它,一切正常。

在另一种情况下,我试图捕获相同的异常,但 ControllerAdvice 根本没有触发,我最终遇到了一个错误,我在前端无能为力。使用 Jhipster 生成的异常,我得到相同的不可用错误。

controllerAdvice(由 jhipster 生成)

例外的一个例子

这样可行:

休息控制器

服务

有了这个我的 ControllerAdvice 捕获异常,建立一个响应状态和我试图得到的错误消息

这不

休息控制器

堆栈跟踪

使用我的自定义异常或 Jhipster 的内置异常,我在前端获得 500 状态,并带有不可解析的 json 响应,但我对此无能为力。

我尝试从我的服务而不是我的 RestController 中抛出我的异常。我尝试了不同的注释(例如,EnableMVC)和我阅读的其他内容,但我无法确定为什么它在两种情况下的响应不同。我读到有关过滤器的内容可能会妨碍 ControllerAdvice?我不知道,如果你们能指导我正确的方向!

先感谢您

编辑

资源中有一个异常处理程序捕获所有运行时异常(我的自定义异常扩展),所以它没有被分派到 ControllerAdvice ......无论如何,谢谢!

0 投票
1 回答
19 浏览

spring-boot - 包/端点/控制器层异常处理设计

所以这是我处理组件/包特定异常的要求。例如对于包 A,BAD Request 应该返回 spring 默认的错误请求响应,但对于包 B,它应该返回自定义响应。

0 投票
0 回答
49 浏览

angular - 如何使用 @ControllerAdvice 和 ResponseEntity 处理异常

我正在开发一个Java应用程序,我正在开发的功能是在用户单击导出按钮时从数据库中填充文件内容后下载文件,文件生成正确,我遇到的问题是当我尝试处理时如果发生异常,这是我的代码:

控制器方法:

我的控制器建议:

ODSExportResourceException 类

前端 Angular 服务方法:

角组件方法:

为了实现此代码,我参考了此处提到的 anwser:[lastAnswer]

当我运行应用程序并触发导出时,在理想情况下,会生成并下载文件,但如果在后面触发异常,例如id不引用数据库中的任何行,则触发了 ObjectNotFoundException,但我没有收到 ControllerAdvice 生成的 ResponseEntity。触发异常时如何将 ResponseEntity 作为 JSON 处理?

0 投票
0 回答
22 浏览

spring-data-jpa - @ControllerAdvice 异常处理程序的 Spring 激活

我用@Service 注释的服务类看起来很像:


每当在数据库中找不到项目时,此方法会通过我的 ApiExceptionHandler 引发 ItemNotFoundException,该 ApiExceptionHandler 扩展了 ResponseEntityExceptionHandler,并使用 @ControllerAdvice 进行注释。这正是我期望发生的,但我的问题是如何从 ControllerAdvice 带注释的类中“调用”ItemAlreadyExistsException,我尝试了类似

但它要求我在方法的签名中添加 throws 异常,然后不调用 @ControllerAdvice。

或者,如果有一些方法,如 itemRepo.verifyItemNotExist(item.getName()).orElseThrow.. 这可能会做我想要的。

我希望我的问题很清楚,并感谢您的帮助。