我有一个有几个端点的控制器。每个端点都映射到一个服务,该服务可以返回200或抛出异常,然后处理该异常并返回正确的错误消息。
例如,如果找不到用户,我抛出
UserNotFoundException
把它映射到一个404找不到的地方。
一切正常,直到我添加了@PreAuthorize。看起来是这样的:
@PreAuthorize("@userController.userService.getUser(#userId).username == authentication.principal.name")
问题是如果
getUser
堆栈跟踪如下所示:
java.lang.IllegalArgumentException:无法计算表达式'@userController.userService.getUser(#userId).username==authentication.principal.name'
在。。。
原因:org.springframework.expression.ExpressionInvocationTargetException:尝试对类型的对象执行方法“getUser”时出现问题。。。
原因:UserNotFoundException
所以看起来问题是由
UserNotFoundException异常
,而不是由
PreAuthorize
这看起来像是一个典型的场景,但我做了很多研究,没有找到任何解决方案。找不到用户时如何获取404?