java - Spring:用@RequestMapping 和@ExceptionHandler 注释一个方法?
问题描述
我最近偶然发现了一些我以前在这种形式中没有见过的代码。也许这里有人可以帮助我更好地了解发生了什么。
@RequestMapping
也就是说,我找到了一个用和 注释的方法@ExceptionHandler
。我认为前者用于处理请求,而后者用于处理异常,所以我认为通常使用两个注释中的一个,但不能同时使用两者。
代码片段是:
@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;
}
我有两个问题:
- 根据Spring 文档
@RequestMapping
,方法的未注释方法参数(不是某些特殊类型)@RequestMapping
隐式注释为@ModelAttribute
(请参阅上述链接下表格末尾的“任何其他参数” )。那么在上面的代码片段中,Exception
参数是否也被隐式注释了@ModelAttribute
?如果是的话,这有意义吗? @RequestMapping
用and来注释方法通常有意义吗@ExceptionHandler
(例如,同时处理请求和异常),或者那会是不好的形式吗?
解决方案
好问题。我会说试试这个。在控制器上,采取两种方法。在一种方法上,仅使用 RequestMethod 并通过从页面接受模型属性来编写代码。在此方法上,为 NullPointerException 创建一个场景。
在方法 2 上,同时注释 RequestMapping 和 ExceptionHandler。你可以看到你是否收到了请求,从方法一到方法二的 ModelAttributes 响应。
如果是,那么这将帮助我们评估异常并处理我们需要模型属性值的无效场景。
同样根据您上面粘贴的解释,ModelAttribute 对于 RequestMapping 是隐式的,而不是对于控制器方法上的所有注释。
请告诉我们。
推荐阅读
- node.js - 为什么我不能使用 react.createContext()
- javascript - 从实现从打字稿中另一个文件导出的接口的类中调用公共函数
- jooq - 使用 jOOQ 从现有记录中进行选择
- msbuild - 将我的构建部署到 azure 时(我使用 devops 管道,但我也尝试直接通过 Visual Studio 部署)我不断收到资源未找到 404
- tinymce - 在 tinymce.init() 中为 fontsize 和 fontfamily 设置默认文本/值
- mysql - SQL 更改值
- corda - 恶意 Corda Oracle
- java - 如何在线程结果后更新警报对话框文本?
- python - sqlite3 提供的绑定数量不正确
- sql - 如何使用 ASP 编辑和删除数据库的行?