让我首先说一下,不能提供静态内容的原因是因为Jersey servlet的默认servlet映射为
/*,并且它占用了所有请求。因此,无法访问提供静态内容的默认servlet。除了以下解决方案之外,另一个解决方案是仅更改servlet映射。你可以通过
ResourceConfig用
@ApplicationPath("/another-mapping")或设置application.properties属性来注释子类
spring.jersey.applicationPath。
关于第一种方法,请看一下
Jersey ServletProperties。你尝试配置的属性是
FILTER_STATIC_CONTENT_REGEX。它指出:
该属性仅在Jersey Servlet容器配置为作为过滤器运行时适用,否则将忽略此属性
spring开机默认配置了泽西servlet容器为一个Servlet(如提到这里):
默认情况下,Jersey将以名为
@Bean的类型设置为Servlet 。你可以通过使用相同的名称创建自己的一个来禁用或覆盖该bean。你也可以通过设置使用过滤器而不是Servlet(在这种情况下,替换或覆盖的是)。
ServletRegistrationBeanjerseyServletRegistrationspring.jersey.type=filter@BeanjerseyFilterRegistration
因此,只要设置属性
spring.jersey.type=filter在你的
application.properties,它应该工作。我已经测试过了
对于FYI,无论是配置为Servlet筛选器还是Servlet,就Jersey而言,功能都是相同的。
顺便说一句,而不是使用
FILTER_STATIC_CONTENT_REGEX,你需要在其中设置一些复杂的正则表达式来处理所有静态文件,而可以使用
FILTER_FORWARD_ON_404。这实际上是我曾经测试过的。我只是将它设置在我的
ResourceConfig
@Componentpublic class JerseyConfig extends ResourceConfig { public JerseyConfig() { packages("..."); property(ServletProperties.FILTER_FORWARD_ON_404, true); }}


