java - Jersey v1 Spring Boot 更改 Jersey root 路径以公开执行器端点

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

从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 and Monitoring URL's成功地重新公开 spring-boot 端点。现在 jersey 忽略除 /hello/** 之外的所有内容,这是我想要的,但我还必须将 Controller 中的路径更改为 @Path("/hello")

我希望我的 Controller 代码保留 @Path("/") 并将 jersey 的应用程序根更改为 /hello。我认为我可以使用 @ApplicationPath("/hello") 注释来完成此操作,但我无法弄清楚使用 Jersey v1 和 Spring Boot 将其放置/配置在哪里。 (我似乎发现的所有示例都使用 Jersey 2 中的 ResourceConfig ,而 Jersey 1 似乎没有相同的实现)

有什么想法吗?

最佳答案

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

  1. 保留所有内容不变,除了设置 Jersey 过滤器的初始化参数

    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 的组合应该可以工作,但是根据我所做的测试,我还没有找到它。如果我能弄清楚的话,我可能会稍后更新这篇文章。

关于java - Jersey v1 Spring Boot 更改 Jersey root 路径以公开执行器端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34027847/

相关文章:

Java 如何使用 Set 参数化泛型方法?

java - 将日期转换为毫秒

spring - SpringBoot-微服务的Docker化+ Angular + MySQL + RabbitMQ

java - REST/jersey 和 JSON 的问题

java - 线程 sleep 未等待正确的时间

java - Selenium Java 邮件发送错误

java - 如何在junit测试中继承自定义@EnableAutoConfiguration注释?

spring-boot - MapStruct 映射器返回空的映射对象

java - 此 URL 不支持 HTTP 方法 GET WL 12.2.1 上的 Rest-full WS

rest - 对多个PATH使用Single Jersey REST类