Jersey v1 Spring 引导更改 jersey root 路径以公开执行器端点
Jersey v1 Spring Boot change jersey root Path to expose actuator endpoints
从 dsyer 的例子开始:https://github.com/dsyer/spring-boot-jersey/tree/master/spring-boot-sample-jersey1
重申一下,我使用的是 Jersey v1 而不是 v2。
我注意到球衣覆盖了 spring-boot-actuator 端点,例如 /env 和 /health。我按照 Spring Boot Jersey and Monitoring URL's 成功地重新暴露了 spring-boot 端点。现在球衣忽略了除 /hello/**
之外的所有内容,这是我想要的,但我还必须将控制器中的路径更改为 @Path("/hello")
我希望我的控制器代码保留 @Path("/")
,只需将 jersey 的应用程序根更改为 /hello
。我想我可以使用 @ApplicationPath("/hello")
注释来完成此操作,但我无法弄清楚使用 Jersey v1 和 Spring Boot 的 put/configure 在哪里。 (我似乎找到的所有示例都使用 Jersey 2 中的 ResourceConfig
,而 Jersey 1 似乎没有相同的实现)
有什么想法吗?
因此,根据您链接到的示例(以及在添加执行器监控之后),我能够通过以下方式让端点工作
除了为 Jersey 过滤器设置初始化参数外,一切保持原样
FilterRegistrationBean bean = new FilterRegistrationBean();
...
bean.addInitParameter("com.sun.jersey.config.feature.FilterForwardOn404", "true");
这使得即使使用默认的 /*
映射,当 Jersey 没有找到监控端点(它不应该)时,它会将请求转发回 servlet 容器,并且它会找到端点。
在您的 post 中,您似乎试图更改 URL 作为监控 URL 的 "shadowing" 的变通方法。但是以上解决了这个问题而不需要改变路径。但是,如果您仍然确实想要更改路径,这就是我能够想出的解决方案。
似乎尝试在 filter 中添加映射会产生您遇到的行为。为了解决这个问题,我没有将 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
的组合应该可以工作,但是根据我所做的测试,我还没有找到它。如果我能弄清楚,我可能会稍后更新这个post。
从 dsyer 的例子开始:https://github.com/dsyer/spring-boot-jersey/tree/master/spring-boot-sample-jersey1
重申一下,我使用的是 Jersey v1 而不是 v2。
我注意到球衣覆盖了 spring-boot-actuator 端点,例如 /env 和 /health。我按照 Spring Boot Jersey and Monitoring URL's 成功地重新暴露了 spring-boot 端点。现在球衣忽略了除 /hello/**
之外的所有内容,这是我想要的,但我还必须将控制器中的路径更改为 @Path("/hello")
我希望我的控制器代码保留 @Path("/")
,只需将 jersey 的应用程序根更改为 /hello
。我想我可以使用 @ApplicationPath("/hello")
注释来完成此操作,但我无法弄清楚使用 Jersey v1 和 Spring Boot 的 put/configure 在哪里。 (我似乎找到的所有示例都使用 Jersey 2 中的 ResourceConfig
,而 Jersey 1 似乎没有相同的实现)
有什么想法吗?
因此,根据您链接到的示例(以及在添加执行器监控之后),我能够通过以下方式让端点工作
除了为 Jersey 过滤器设置初始化参数外,一切保持原样
FilterRegistrationBean bean = new FilterRegistrationBean(); ... bean.addInitParameter("com.sun.jersey.config.feature.FilterForwardOn404", "true");
这使得即使使用默认的
/*
映射,当 Jersey 没有找到监控端点(它不应该)时,它会将请求转发回 servlet 容器,并且它会找到端点。在您的 post 中,您似乎试图更改 URL 作为监控 URL 的 "shadowing" 的变通方法。但是以上解决了这个问题而不需要改变路径。但是,如果您仍然确实想要更改路径,这就是我能够想出的解决方案。
似乎尝试在 filter 中添加映射会产生您遇到的行为。为了解决这个问题,我没有将 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
的组合应该可以工作,但是根据我所做的测试,我还没有找到它。如果我能弄清楚,我可能会稍后更新这个post。