我试图在Spring和Jersey中基于运行时配置隐藏REST端点。最直接的方法是从控制器本身抛出NotFoundException
,但也许更犹豫不决。控制器在config类的构造函数中注册,该类扩展org.glassfish.jersey.server.ResourceConfig
。
我想在控制器上使用@Profile
注释,但我仍然可以访问端点。当我点击该端点时,我收到以下错误:
o.g.j.s.s.SpringComponentProvider - None or multiple beans found in Spring context
然后Jersey设法访问该控制器,我通过将调试器附加到Spring进程来确认。所以泽西岛不尊重@Profile
设置。
另外,我还将Swagger插入到Jersey中,当访问定义端点(.../swagger.json
)时,我可以看到@Profile
- 已禁用控制器提供的端点。
我能做的更好的事情是抛出NotFoundException
最佳选择吗?
答案 0 :(得分:0)
注意:抱歉,我以为我看到你使用的是Spring Boot。以下答案仅与Spring Boot相关。
@Profile
仅适用于Spring bean注册,但您仍在使用Jersey作为资源注册该服务。您可以使用ResourceConfigCustomizer
并将ResourceConfig
添加到自定义程序。这样,如果正确的配置文件处于活动状态,它将仅使用Jersey @Component
@Profile("..")
public class MyResourceConfigCustomizer implements ResourceConfigCustomizer {
@Override
public void customize(ResourceConfig config) {
config.register(MyResource.class);
}
}
注册资源。
{{1}}