@FeignClient
和 @RequestMapping
无法添加到同一接口(interface)。现在我想检查这两个注释是否同时使用以给出一些错误消息。
问题:
Spring中是否支持类似isAnnotatedBy(Annotation annotation)
方法?如果没有,我怎么能在这里实现我的目标呢?
谢谢!
最佳答案
我怀疑您遇到了与此问题相关的问题 https://github.com/spring-cloud/spring-cloud-netflix/issues/466 .
spring applicationContext 提供了实用方法来查找带有某些注释的 bean。
解决方案可能涉及引导 applicationContext 的启动并在那里搜索重叠的注释。
为此,您需要注册一个 ApplicationListener,它会搜索所有使用 @FeignClient 进一步注释的 @RequestMapping beans。
实现可能如下所示:
@Component
public class ContextStartupListener
implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
private ApplicationContext applicationContext;
@Override
public void onApplicationEvent(ContextRefreshedEvent event){
for(String beanName : applicationContext.getBeanNamesForAnnotation(RequestMapping.class)) {
if(applicationContext.findAnnotationOnBean(beanName, FeignClient.class)!=null){
throw new AnnotationConfigurationException("Cannot have both @RequestMapping and @FeignClient on "+beanName);
}
}
}
}
关于spring - 如何确保 Controller 在 Spring Boot 中被特定的注释所注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41093792/