提问人:wanderer 提问时间:8/12/2023 更新时间:8/12/2023 访问量:17
方面,异常处理程序不会捕获异常 Java Spring
aspects, exceptionhandlers don't catch exception java spring
问:
注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface BotExceptionCheck {
}
@Aspect
@Component
public class BotExceptionCheckAspect {
SendMessageProducer sendMessageProducer;
UserService userService;
public BotExceptionCheckAspect(SendMessageProducer sendMessageProducer, UserService userService) {
this.sendMessageProducer = sendMessageProducer;
this.userService = userService;
}
@Around("@annotation(BotExceptionCheck)")
public Object handleException(ProceedingJoinPoint joinPoint) throws Throwable {
Object result = null;
try {
result = joinPoint.proceed();
} catch (BotAuthorizeException ex) {
var user = userService.findById(ex.getChatId());
sendMessageProducer.sendMessage(SendMessage.builder()
.chatId(user.getChatId())
.text(ex.getMessage())
.build());
}
return result;
}
}
抛出异常的方法
@BotExceptionCheck
public void checkSubscriptionForChannel(ChatMember chatMember) {
if (chatMember.getStatus().equals("kicked") || chatMember.getStatus().equals("left")) {
throw new BotAuthorizeException(String.valueOf(chatMember.getUser().getId()), """
You don't subscribe to the channel
""");
}
}
我也尝试编写异常处理程序,但它也没有看到异常
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
SendMessageProducer sendMessageProducer;
UserService userService;
public GlobalExceptionHandler(SendMessageProducer sendMessageProducer, UserService userService) {
this.sendMessageProducer = sendMessageProducer;
this.userService = userService;
}
@ExceptionHandler(BotAuthorizeException.class)
public void handleBotAuthorizeException(BotAuthorizeException ex){
var user = userService.findById(ex.getChatId());
sendMessageProducer.sendMessage(SendMessage.builder()
.chatId(user.getChatId())
.text(ex.getMessage())
.build());
}
}
我在所有这些情况下都遇到异常: 2023-08-12 10:15:54.070 错误 11228 --- [legram Executor] o.t.t.u.DefaultBotSession:您不订阅该频道。
com.moviescreenbot.exceptions.authorize.BotAuthorizeException:您未订阅频道。
at com.moviescreenbot.services.user.UserService.checkSubscriptionForChannel(UserService.java:53) ~[main/:na]
at com.moviescreenbot.services.user.UserService.authorizeUser(UserService.java:24) ~[main/:na]
at com.moviescreenbot.services.user.UserService$$FastClassBySpringCGLIB$$64cf6081.invoke(<generated>) ~[main/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.20.jar:5.3.20]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) ~[spring-aop-5.3.20.jar:5.3.20]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.20.jar:5.3.20]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.20.jar:5.3.20]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.20.jar:5.3.20]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.20.jar:5.3.20]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) ~[spring-aop-5.3.20.jar:5.3.20]
at com.moviescreenbot.services.user.UserService$$EnhancerBySpringCGLIB$$6ca7934e.authorizeUser(<generated>) ~[main/:na]
帮助解决此问题
答: 暂无答案
评论