1

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

重申我使用的是 Jersey v1 而不是 v2。

我注意到 jersey 覆盖了 spring-boot-actuator 端点,例如 /env 和 /health。我按照Spring Boot Jersey 和 Monitoring URL成功地重新公开了 spring-boot 端点。现在球衣忽略了一切,但这/hello/**是我想要的,但我还必须将控制器中的路径更改为@Path("/hello")

我希望我的控制器代码保持@Path("/")不变,只需将球衣的应用程序根更改为/hello. 我想我可以通过注释来完成此操作,@ApplicationPath("/hello")但我无法弄清楚使用 Jersey v1 和 Spring Boot 在哪里放置/配置它。(我似乎ResourceConfig从 Jersey 2 中找到的所有示例都使用 Jersey 1 似乎没有相同的实现)

有任何想法吗?

4

1 回答 1

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应该起作用,但是通过我所做的测试,我还没有找到它。如果我能弄清楚,我可能会稍后更新这篇文章。

于 2015-12-02T03:51:04.270 回答