是否可以创建一个只有在某个配置文件处于活动状态时才映射的方法级@RequestMapping?
我知道只有在特定的概要文件处于活动状态时才可以创建控制器,但我指的是方法级别的方法@RequestMapping。
发布于 2017-10-03 05:01:07
不是的。配置文件只影响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
}发布于 2017-10-03 04:59:02
不是的。
摘自spring文档:
@Profile注释可以通过以下任何一种方式使用:
将配置类作为直接或间接标注为@的任何类上的类型级批注,包括@Configuration classes
上的方法级批注
如果@Configuration类被标记为@Profile,那么所有与该类关联的@Bean方法和@Import注释都将被绕过,除非一个或多个指定的概要文件处于活动状态。这与Spring XML中的行为非常相似:例如,如果提供了been元素的profile属性,则除非激活配置文件'p1‘和/或'p2’,否则不会解析been元素。同样,如果@Component或@Configuration类被标记为@Profile({"p1","p2"}),则除非激活配置文件'p1‘和/或'p2’,否则不会注册/处理该类。
发布于 2022-01-30 11:03:55
但是您可以有多个控制器,所以将特定于概要文件的方法放入一个新的方法中,并用@Profile("special_profile")标记它
https://stackoverflow.com/questions/46533517
复制相似问题