springboot的aspect和ExceptionHandler统一异常处理的顺序问题

蓝灵峰翌 2019-11-07 09:44:39
在使用springboot的时候,我在Controller对象中的RequestMethod注解的方法(假设方法为A)上使用了一个自定义注解(假设注解为B),然后还有一个AOP方法(假设为C)是使用@Before切这个自定义注解B,我的想法是每次进入到A方法的时候先去执行方法C里面的代码,另外在方法A里面有RequestBody注解的参数对象,该对象的属性使用了@Min,@Max之类的校验注解,
我还定义了另外一个统一异常处理的对象,@ExceptionHandler注解的方法来处理特殊的异常,
现在的问题是,当@Min校验不通过的时候,是直接进入了@ExceptionHandler注解的方法里面,不会去执行方法C的代码,
怎么做才可以先执行C代码,然后才进行参数的校验呢?

class MyObj {
@Min
private Integer field;
}

@RequestMapping
@AnnotationB
public void methodA(@RequestBody @Valid MyObj obj) {}

@Before(@CustomAnnotation)
methodC() {}

@ExceptionHandler(SpecialException.class)
methodD() {}

大概代码就是这个样子了,
每次执行methodA的代码之前会先执行methodC的代码,但是当MyObj的校验不通过的时候,会直接进入到methodD方法,而不会先执行methodC的代码了,有没有办法可以使得就算MyObj校验不通过,也会先进入到methodC代码执行呢?



...全文
956 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜鸟①个 2019-11-07
  • 打赏
  • 举报
回复
那个被@ExceptionHandler标注的方法可以传很多对象进去,比如request.response.exception ,这些可以被方法c拿到吧
蓝灵峰翌 2019-11-07
  • 打赏
  • 举报
回复
引用 1 楼 lkwahl 的回复:
你可以试试在方法d上加你定义的注解
那自定义的注解里面有些属性呢,是跟RequestMethod注解的方法有关的数据,比喻说接口的权限相关,方法C是拿到这些数据进行处理的
菜鸟①个 2019-11-07
  • 打赏
  • 举报
回复
你可以试试在方法d上加你定义的注解

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧