JerseyConfig和@Profile隐藏REST端点

时间:2018-04-06 20:40:28

标签: spring rest jersey-2.0 swagger-2.0

我试图在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最佳选择吗?

1 个答案:

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