java - Spring:同时使用@RequestMapping和@ExceptionHandler注释一个方法?

标签 java spring spring-mvc request-mapping

我最近偶然发现了一些我以前从未以这种形式见过的代码。也许这里有人可以帮助我更好地了解发生了什么。

也就是说,我发现了一个同时使用 @RequestMapping @ExceptionHandler 注释的方法。我认为前者用于处理请求,而后者用于处理异常,因此我认为通常会使用这两个注释中的任何一个,但不会同时使用两个注释。

我在这里找到了代码片段:https://github.com/shopizer-ecommerce/shopizer/blob/2.5.0/sm-shop/src/main/java/com/salesmanager/shop/store/api/exception/RestErrorHandler.java#L24

代码片段是:

@RequestMapping(produces = "application/json")
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public @ResponseBody ErrorEntity handleServiceException(Exception exception) {
    log.error(exception.getMessage(), exception);
    ErrorEntity errorEntity = createErrorEntity(null, exception.getMessage(),
                                                exception.getLocalizedMessage());
    return errorEntity;
}

我有两个问题:

  1. 根据Spring documentation on @RequestMapping@RequestMapping 方法的未注释方法参数(不属于某种特殊类型)会使用 @ModelAttribute 隐式注释(请参阅上述链接下表格末尾的“任何其他参数”)。那么在上面的代码片段中,Exception参数是否也隐式用@ModelAttribute注释?如果是的话,这有意义吗?
  2. 使用 @RequestMapping@ExceptionHandler 注释一个方法通常是否有意义(例如,处理请求和异常),或者这会是一种不好的形式吗?

最佳答案

好问题。 我想说试试这个。在 Controller 上,采取两种方法。一种方法仅使用 RequestMethod 并通过从页面接受模型属性来编写代码。 在此方法中,为 NullPointerException 创建一个场景。

在方法 2 上,同时注释 RequestMapping 和 ExceptionHandler。您可以看到是否收到了从方法一到方法二的请求、带有 ModelAttributes 的响应。

如果是,那么这将帮助我们评估异常并处理需要模型属性值的无效场景。

此外,根据您上面粘贴的解释,ModelAttribute 对于 RequestMapping 是隐式的,而不是对于 Controller 方法上的所有注释。

请告诉我们。

关于java - Spring:同时使用@RequestMapping和@ExceptionHandler注释一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56932645/

相关文章:

java - 增加android中textview的高度

java - RegEX:如何匹配未包围的字符串

java - 使用 Spring Security 3 实现 CAS

java - 创建简单的 Spring AOP 时出现异常抛出建议演示

java - 在 Spring boot 应用程序中传递常量消息的正确方法(messages.properties 或 Constant 类)

java - MySQL Found_Rows() 返回正确值的两倍

java - 根据 "Class"创建一个类的新实例

Java 和@annotations

java - Autowiring 强类型集合时出现问题

java - 无法在 Spring Boot 2.0.0 中 Autowiring 身份验证管理器