从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 似乎没有相同的实现)
有什么想法吗?
最佳答案
因此,根据您链接到的示例(以及添加执行器监控后),我能够通过以下方式让端点工作
保留所有内容不变,除了设置 Jersey 过滤器的初始化参数
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
的组合应该可以工作,但是根据我所做的测试,我还没有找到它。如果我能弄清楚的话,我可能会稍后更新这篇文章。
关于java - Jersey v1 Spring Boot 更改 Jersey root 路径以公开执行器端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34027847/