Java Jersey v1 Spring引导更改Jersey根路径以公开执行器端点

Java Jersey v1 Spring引导更改Jersey根路径以公开执行器端点,java,spring-boot,jersey-1.0,spring-boot-actuator,Java,Spring Boot,Jersey 1.0,Spring Boot Actuator,从dsyer的例子开始: 为了重新迭代,我使用的是Jersey v1而不是v2 我注意到jersey覆盖了spring引导执行器端点,如/env和/health。我随后成功地重新公开了spring引导端点。现在jersey忽略了所有内容,除了我想要的/hello/**,但我还必须将控制器中的路径更改为@Path(“/hello”) 我希望我的控制器代码保持@Path(“/”,只需将jersey的应用程序根目录更改为/hello。我想我可以通过@ApplicationPath(“/hello”)注

从dsyer的例子开始:

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

我注意到jersey覆盖了spring引导执行器端点,如/env和/health。我随后成功地重新公开了spring引导端点。现在jersey忽略了所有内容,除了我想要的
/hello/**
,但我还必须将控制器中的路径更改为
@Path(“/hello”)

我希望我的控制器代码保持
@Path(“/”
,只需将jersey的应用程序根目录更改为
/hello
。我想我可以通过
@ApplicationPath(“/hello”)
注释来实现这一点,但我不知道使用Jersey v1和Spring Boot在哪里放置/配置它。(我发现的所有示例都使用了Jersey 2中的
ResourceConfig
,Jersey 1似乎没有相同的实现)


有什么想法吗?

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

  • 一切保持原样,除了设置Jersey过滤器的init参数

    FilterRegistrationBean bean = new FilterRegistrationBean();
    ...           
    bean.addInitParameter("com.sun.jersey.config.feature.FilterForwardOn404", "true");
    
    这使得即使使用默认的
    /*
    映射,当Jersey没有找到监视端点(它不应该这样做)时,它也会将请求转发回servlet容器,并找到端点

  • 在您的帖子中,您似乎试图更改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
    的组合可以工作,但是通过我所做的测试,我还没有找到它。如果我能弄明白的话,我以后可能会更新这篇文章。

    老实说,我的代码中甚至没有任何
    ResourceConfig
    ,这就是我不知道将此
    @ApplicationPath
    注释放在哪里的原因之一