春季:同时使用@RequestMapping和@ExceptionHandler注释方法吗?

时间:2019-07-08 10:07:02

标签: java spring spring-mvc request-mapping

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

就是说,我找到了一个用@RequestMapping @ExceptionHandler注释的方法。我以为前者用于处理请求,而后者则用于处理异常,因此我认为通常在两个注解中都使用 而不使用 both 同时。

我在这里找到了代码段: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隐式注释(请参见“ Any其他参数” (位于上方链接下方表格的末尾)。因此,在上面的代码片段中,Exception参数是否也被@ModelAttribute隐式注释?如果是的话,那有意义吗?
  2. @RequestMapping@ExceptionHandler注释一个方法(例如,处理请求和异常)通常是否有意义,还是不好的形式?

1 个答案:

答案 0 :(得分:0)

好问题。 我会说试试看。在控制器上,采取两种方法。在一种方法上,仅使用RequestMethod并通过接受页面的model属性来编写代码。 在此方法上,为NullPointerException创建方案。

在方法2上,注释RequestMapping和ExceptionHandler。然后,您可以查看是否从方法1到方法2获得带有ModelAttributes的请求和响应。

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

根据您上面粘贴的说明,ModelAttribute对于RequestMapping是隐式的,而不是对于控制器方法上的所有注释都是隐式的。

请让我们知道。