Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请问不要使用ControllerAdvice代替AOP的原因是什么? #7

Open
cznno opened this issue Jan 8, 2018 · 5 comments
Open

请问不要使用ControllerAdvice代替AOP的原因是什么? #7

cznno opened this issue Jan 8, 2018 · 5 comments

Comments

@cznno
Copy link

cznno commented Jan 8, 2018

在使用中,这种ControllerAdvice看上去比较简单方便。
但是在src/main/java/plm/ControllerExceptionAdvice.java的注释里特别说明了这点,看了专栏里好像没有特别说明这种方法的不足,请问有没有相关的解释说明呢?

@xwjie
Copy link
Owner

xwjie commented Jan 8, 2018

ControllerAdvice是有异常的时候才触发,我们的aop除了处理异常还有打印日志等功能。
而且用了ControllerAdvice的话,你成功的时候和失败的时候是否返回格式不一样呢?

@rabin99
Copy link

rabin99 commented Jan 29, 2018

您好!有2点不是很明白。
1.“ControllerAdvice是有异常的时候才触发”,“而且用了ControllerAdvice的话,你成功的时候和失败的时候是否返回格式不一样呢?”
在项目模版中AOP也是catch (Throwable e)然后处理,而且在ControllerAdvice里面也可以对异常进行instaninstanceof判断类型,也能和模版项目中AOP一样的操作
2.如果post请求,使用ControllerAdvice,还需要获取请求中body中内容,好像取不出来,有什么办法吗?
使用这个aop可以直接用proceedingJoinPoint取。

@hkbaicfl
Copy link

亲测:ControllerAdvice一样可以处理异常和打印日志。

@cznno
Copy link
Author

cznno commented Apr 12, 2018

@ljhtoljh 可以通过 ServletRequest#getInputStream 来读body, 不过应该有更好的办法吧
另外, ControllerAdvice 里返回的格式也是可以自定义的, 所以格式应该不会有问题. 在实际使用中两种方式似乎感觉不到什么差别, 由ControllerAdvice管理感觉结构更加清晰一点

@5xiaoxi2
Copy link

个人理解 xwjie 的AOP可以记录正常日志和异常日志
ControllerAdvice只能记录异常访问日志

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants