- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 Spring MVC 与 Spring Boot 和 Thymeleaf 结合使用。我有返回 Thymeleaf 模板名称的普通 Controller 和用 @RepsonseBody
注释的 REST Controller 。
假设我有一个 EntityNotFoundException
,它是由 Controller 调用的某些代码抛出的。如果抛出,我想分别为 REST Controller 返回 404 状态代码和错误页面或错误消息。
我当前的普通 Controller 设置:
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}
@Controller
public class FooController {
@RequestMapping("/foo") public String foo() {
try {
...
} catch (EntityNotFoundException enfe) {
throw new ResourceNotFoundException(enfe.getMessage());
}
return "foo";
}
}
对于 REST Controller ,我不捕获异常并让全局异常处理程序接收它:
@Controller
public class BarController {
@RequestMapping("/bar")
@ResponseBody
public SomeDto bar() throws EntityNotFoundException {
...
return someDto;
}
}
@ControllerAdvice
public class ExceptionHandlerAdvice {
@ExceptionHandler(EntityNotFoundException.class)
public final ResponseEntity<Object> handleEntityNotFoundExceptionEntityNotFoundException enfe) {
return new ResponseEntity<>(enfe.getMessage, HttpStatus.NOT_FOUND);
}
}
我也不想在我的普通 Controller 中捕捉并重新抛出。全局处理程序应该同时处理:
@ExceptionHandler(EntityNotFoundException.class)
public final Object handleEntityNotFoundException(EntityNotFoundException enfe) {
if (/* is REST controller? */) {
return new ResponseEntity<>(enfe.getMessage(), HttpStatus.NOT_FOUND);
} else {
Map<String, Object> model = ImmutableMap.of("message", enfe.getMessage());
return new ModelAndView("error", model, HttpStatus.NOT_FOUND);
}
}
有没有办法确定异常的来源,即 Controller 是否使用 @ResponseBody
或类似的注释?
最佳答案
我找到了一个解决方案。您可以将当前 Controller 方法作为 HandlerMethod
参数注入(inject)。
@ExceptionHandler(EntityNotFoundException.class)
public final Object handleEntityNotFoundException(EntityNotFoundException enfe, HandlerMethod handlerMethod) {
boolean isRestController = handlerMethod.hasMethodAnnotation(ResponseBody.class)
|| handlerMethod.getBeanType().isAnnotationPresent(ResponseBody.class)
|| handlerMethod.getBeanType().isAnnotationPresent(RestController.class);
if (isRestController) {
return new ResponseEntity<>(enfe.getMessage(), HttpStatus.NOT_FOUND);
} else {
Map<String, Object> model = ImmutableMap.of("message", enfe.getMessage());
return new ModelAndView("error", model, HttpStatus.NOT_FOUND);
}
}
关于java - Spring MVC : determine which controller threw exception in @ExceptionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44603942/
我的 iPad 应用程序一直在日志中显示此消息...... : ImageIO: CreateMetadataFromXMPBufferInternal Threw error #203 (Dupl
我正在使用 sinon.JS 编写简单的单元测试。被测试的代码有一些类型检查,这会抛出 TypeError: Tx = class Tx { constructor(date) {
我正在使用 args4j 来解析提供给我的程序的参数。 这是我定义 2 个日期类型参数的代码。该处理程序仅解析给定的日期,如果日期格式错误,则抛出 CommandLineException。 @Opt
回归。升级插件后,我的应用程序不再启动。 这是我的 flutter 规范: Flutter 已在稳定 channel 上保持最新状态 Flutter 3.0.2 • channel 稳定 • http
我开发 WPF Prism 6 MVVM 多模块应用程序。直到今天一切正常。但是今天早上我决定清理并重建我的应用程序。在清理和重建后,我的应用程序运行时出现以下错误: PresentationFram
我正在我的 Java EE Maven 项目中使用这个库:https://github.com/bertrandmartel/speed-test-lib 我收到以下异常 java.lang.Clas
我使用假客户端微服务并收到以下错误 - $ mvn spring-boot:run [INFO] Scanning for projects... [INFO] [INFO] ------------
我已经创建了一个调用我的不同模式的服务。所以我有一个模态调用“Confirm Modal”,它可以接受 3 个参数:一个确认函数、一个拒绝函数和一个主体。这是以下模式: export class Co
我正在尝试访问静态列表的值。但是,当我尝试这样做时,会抛出此异常。 System.TypeInitializationException: The type initializer for 'Tips
我将 Spring MVC 与 Spring Boot 和 Thymeleaf 结合使用。我有返回 Thymeleaf 模板名称的普通 Controller 和用 @RepsonseBody 注释的
Objective: {objective 0x7fb7a49de030: + *0x7fb7a4d254b0.negError{id: 1392} + *UIButton:0x7fb7a4b877
我有一个用户报告了这个异常。我在这里和其他地方的研究表明这是一个静态构造函数错误。有关的类包含许多已初始化的静态字段。我认为它是其中之一,但我不确定如何找到它。该建议似乎是在静态构造函数中包含一个 t
我在调用 WCF 服务时收到如下 FaultException: 2012-04-02 16:26:00.3593|Error|System.ServiceModel.FaultException`1
我执行了一个 spark 程序,在该程序中,我使用客户框架将 Drools 规则应用于事实对象。我在 Flatmap 函数中调用了这个自定义框架,并且规则已成功执行,但在收集结果后我看到了以下异常。
我在执行项目时遇到上述错误。当我以正常方式执行它时,它运行良好,没有抛出任何错误。但是当我尝试通过 oozie 将其作为 java 操作调用来运行相同的程序时,它会抛出以下异常 Failing Ooz
我正在使用 JAX-RS jersey ExceptionMapper,我想知道是否有办法在方法 toResponse() 内部知道哪个方法(来自 API)抛出了异常。 示例(伪代码) @javax.
我是 Spring 新手,我正在尝试执行此应用程序,但遇到了这样的异常 SEVERE: Servlet [spring] in web application [/loginDB] threw loa
我是 android 和 xamarin 的新手。最近我根据 xamrarin 示例 TaskyPortable 创建了一个 android 应用程序。问题是每当执行以下代码时都会抛出错误。
我遇到了这个错误,我不知道出了什么问题我只是想检查用户名和密码,然后进入一个显示是否登录的页面 package cse; import java.io.IOException; import java
在 eclipse Juno 上的 Tomcat 6.0.26 中部署我的应用程序时出现以下错误。我将 struts 用于 Web 内容,将 spring 用于 ORM。 我已尝试清理和构建工作区。
我是一名优秀的程序员,十分优秀!