Jersey v1 Spring Boot更改平针根路径以暴露执行器端点

时间:2015-12-01 18:49:44

标签: java spring-boot jersey-1.0 spring-boot-actuator

从dsyer的例子开始:https://github.com/dsyer/spring-boot-jersey/tree/master/spring-boot-sample-jersey1

重新迭代我使用泽西岛v1而不是v2。

我注意到球衣覆盖了弹簧靴 - 执行器端点,例如/ env和/ health。我跟着Spring Boot Jersey and Monitoring URL's成功重新暴露了spring-boot端点。现在,泽西忽略了/hello/**以外的所有内容,这是我想要的,但我还必须将控制器中的路径更改为@Path("/hello")

我希望我的控制器代码保持@Path("/"),只需将泽西的应用程序根目录更改为/hello。我想我可以使用@ApplicationPath("/hello")注释完成此操作,但我无法确定使用Jersey v1和Spring Boot放置/配置的位置。 (我似乎发现所有的例子都来自Jersey 2,Jersey 1似乎没有相同的实现)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

因此,基于您链接的示例(以及添加执行器监控后),我能够通过以下方式使端点工作

  1. 保留所有内容,除了为Jersey过滤器设置init参数

    FilterRegistrationBean bean = new FilterRegistrationBean();
    ...           
    bean.addInitParameter("com.sun.jersey.config.feature.FilterForwardOn404", "true");
    

    这使得即使使用默认的/*映射,当Jersey找不到监控端点(它不应该)时,它会将请求转发回servlet容器,它会找到终点。

  2. 在您的帖子中,您似乎尝试将URL更改为解决监视URL的“阴影”。但是上面修复了这个问题而不需要改变路径。但如果你 希望改变路径,那么这就是我能够提出的解决方案。

    似乎尝试在过滤器中添加映射会产生您遇到的行为。为了解决这个问题,我没有将Jersey注册为过滤器,而是注册为servlet。请注意,以前的解决方案仅适用于过滤器。但是在这里我们将使用servlet来更改URL映射。

    @Bean
    public ServletRegistrationBean jerseyServlet() {
        ServletRegistrationBean bean = new ServletRegistrationBean();
        bean.setServlet(new ServletContainer());
        bean.addInitParameter("com.sun.jersey.config.property.packages",
                              "com.sun.jersey;demo");
        bean.addUrlMappings("/api/*");
        return bean;
    }
    
  3. 我想应该有一些ResourceConfig/@ApplicationPath的组合应该可行,但是通过我已经完成的测试,我还没有找到它。如果我能弄清楚的话,我可能会在以后更新这篇文章。