是否可以创建仅在某个配置文件处于活动状态时映射的方法级@RequestMapping
?
我知道只有在特定的配置文件处于活动状态时才可以创建控制器,但我在方法级别专门提到方法@RequestMapping
答案 0 :(得分:2)
没有
取自春季文档:
@Profile注释可以通过以下任何方式使用:
- 直接或间接作为任何类的类型级注释 用@Component注释,包括@Configuration classes
- 作为元注释,用于组成自定义构造型 注释
- 作为任何@Bean方法的方法级注释
如果是 @Configuration类用@Profile标记,所有的@Bean方法 和绕过该类的@Import注释将被绕过 除非一个或多个指定的配置文件处于活动状态。这是非常的 类似于Spring XML中的行为:如果是profile的profile属性 豆元素例如是豆类 除非配置文件'p1'和/或'p2'已被解析,否则将不会解析该元素 活性。同样,如果标记了@Component或@Configuration类 使用@Profile({“p1”,“p2”}),该类不会 注册/处理,除非配置文件'p1'和/或'p2'已经 激活。
答案 1 :(得分:1)
没有。配置文件仅影响bean创建,而不影响方法。所以你要么创建整个控制器,要么不。
您的选择:
1)使用必须仅对给定配置文件可用的方法创建一个控制器。
2)如果您不想为给定方法创建专用控制器,只能为给定的配置文件创建,您可以编程方式检查活动配置文件并返回404或任何您想要的。
@Autowired
Environment environment;
public boolean isMyProfileActive() {
for (final String profileName : environment.getActiveProfiles()) {
if("mySpecificProfile".equals(profileName)) return true;
}
return false;
}
@RequestMapping(...)
public ResponseEntity<?> myMethod(){
if(isMyProfileActive()) return new ResponseEntity(HttpStatus.NOT_FOUND);
//the rest of the code for the method
}