@RequestMapping只映射到@Profile

时间:2017-10-02 20:48:17

标签: spring spring-mvc

是否可以创建仅在某个配置文件处于活动状态时映射的方法级@RequestMapping

我知道只有在特定的配置文件处于活动状态时才可以创建控制器,但我在方法级别专门提到方法@RequestMapping

2 个答案:

答案 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
}