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



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

为了重新迭代,我使用的是Jersey v1,而不是v2。

我注意到jersey掩盖了弹簧引导执行器的端点,如/env和/health。我关注了Spring Boot Jersey和Monitoring URL';s以成功地重新公开弹簧引导端点。现在jersey忽略了除/hello/**之外的所有内容,这正是我想要的,但我也不得不将控制器中的Path更改为@Path("/hello")

我希望我的控制器代码保持为@Path("/"),只需将jersey的应用程序根更改为/hello。我想我可以用@ApplicationPath("/hello")注释来实现这一点,但我不知道使用Jersey v1和Spring Boot将其放置/配置在哪里。(我发现的所有例子似乎都使用了Jersey 2的ResourceConfig,而Jersey 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;
    }
    

我想应该有一些ResourceConfig/@ApplicationPath的组合可以工作,但根据我所做的测试,我还没有找到它。如果我能弄清楚的话,我可以稍后更新这篇文章。

最新更新