该应用程序使用JDK 8,Sping Boot 和Sping Boot Jersey启动器,并打包为WAR(尽管它通过Sping Boot Maven插件在本地运行)。
我想做的是让我在飞行中(在构建时)生成的文档作为欢迎页面。
我尝试了几种方法:
1.通过在application.properties
中配置正确的init参数,让Jersey提供静态内容,如here所述
1.引入metadata-complete=false
web.xml
,以便将生成的HTML文档列为欢迎文件。
但都没成功。
我想避免启用Spring MVC或创建Jersey资源只是为了服务静态文件。
你知道吗?
下面是Jersey配置类(我尝试在那里添加一个ServletProperties.FILTER_STATIC_CONTENT_REGEX
,但没有成功):
@ApplicationPath("/")
@ExposedApplication
@Component
public class ResourceConfiguration extends ResourceConfig {
public ResourceConfiguration() {
packages("xxx.api");
packages("xxx.config");
property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true);
property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);
}
}
字符串
这里是Sping Boot 应用程序类(我尝试使用spring.jersey.init.jersey.config.servlet.filter.staticContentRegex=/.*html
添加application.properties
,但它不起作用,我不确定这里的属性键应该是什么):
@SpringBootApplication
@ComponentScan
@Import(DataConfiguration.class)
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
型
4条答案
按热度按时间yh2wf1be1#
让我先声明一下,静态内容不会被提供的原因是因为Jersey servlet的默认servletMap,即
/*
,并占用了所有请求。因此,无法访问提供静态内容的默认servlet。除了下面的解决方案,另一种解决方案是简单地更改servletMap。您可以通过使用@ApplicationPath("/another-mapping")
注解ResourceConfig
子类或设置application.properties
属性spring.jersey.applicationPath
来实现这一点。关于你的第一种方法,看看Jersey
ServletProperties
。你试图配置的属性是FILTER_STATIC_CONTENT_REGEX
。它声明:该属性仅在Jersey servlet容器配置为作为筛选器运行时适用,否则将忽略该属性
Sping Boot 默认情况下将Jersey servlet容器配置为Servlet(如此处所述):
默认情况下,Jersey将被设置为
jerseyServletRegistration
类型的@Bean
中的Servlet。您可以通过创建一个同名的bean来禁用或覆盖该bean。**您还可以通过设置spring.jersey.type=filter
**来使用Filter而不是Servlet(在这种情况下,要替换或覆盖的@Bean
是jerseyFilterRegistration
)。所以只要在你的
application.properties
中设置属性spring.jersey.type=filter
,它就应该工作了。我已经测试过了。仅供参考,无论是配置为Servlet过滤器还是Servlet,就Jersey而言,功能是相同的。
顺便说一句,如果你需要设置一些复杂的正则表达式来处理所有的静态文件,你可以使用
FILTER_FORWARD_ON_404
,而不是使用FILTER_STATIC_CONTENT_REGEX
。字符串
esyap4oy2#
对于那些仍然不能让这个工作的人,我遵循了@peeskillet提供的答案,并且不得不做一个额外的改变。
之前我在
Application.java
中创建了以下方法。字符串
问题是,这会为
/*
路径注册servlet,然后设置JerseyResourceConfig
配置文件。一旦我删除了上面的方法,并将
@Configuration
注解放在我的ResourceConfig
类上,我注意到静态资源可以通过Sping Boot 检索。为了完整起见,这是我的
ResourceConfig
的一个片段。型
This blog post有助于确定
ResourceConfig
的差分方法。f1tvaqid3#
下面的设置为我工作
设置
字符串
setFILTER_FORWARD_ON_404
型
注意:使用**@Configuration代替@component**
lzfw57am4#
在我们的例子中,我们的项目完全基于jersey JAX-RS构建,所以我们不能将其用作过滤器,因为它会破坏整个项目。
将
spring-boot-starter-web
添加到您的依赖项中,将spring MVC添加到您的classpath中。由于spring actuator构建在MVC上,因此您需要更改上下文路径。字符串
1.将web服务器(tomcat)servlet上下文路径设置为
/
1.将spring mvc servlet路径设置为
/management
,这样你的actuator端点就变成了/management/actuator/health
1.像往常一样将jersey上下文设置为
/
,以使其他路由按原样工作参考-https://docs.spring.io/spring-boot/docs/1.4.1.RELEASE/reference/html/howto-actuator.html