Springfox 类型 javax.servlet.http.HttpServletRequest 不存在
Springfox Type javax.servlet.http.HttpServletRequest not present
我正在尝试使用 SpringFox。
Spring 引导版本:'org.springframework.boot:3.0.0-SNAPSHOT'
build.gradle
dependencies {
...
implementation 'io.springfox:springfox-petstore:2.10.5'
implementation "io.springfox:springfox-swagger2:3.0.0"
implementation "io.springfox:springfox-oas:3.0.0"
implementation 'io.springfox:springfox-swagger-ui:3.0.0'
...
}
Spring开机Class
@SpringBootApplication
@EnableSwagger2
@EnableOpenApi
public class ServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class, args);
}
}
SwaggerUiWebMvcConfigurer
@Component
public class SwaggerUiWebMvcConfigurer implements WebMvcConfigurer {
private final String baseUrl;
public SwaggerUiWebMvcConfigurer(
@Value("${springfox.documentation.swagger-ui.base-url:}") String baseUrl) {
this.baseUrl = baseUrl;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String baseUrl = StringUtils.trimTrailingCharacter(this.baseUrl, '/');
registry.
addResourceHandler(baseUrl + "/swagger-ui/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
.resourceChain(false);
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController(baseUrl + "/swagger-ui/")
.setViewName("forward:" + baseUrl + "/swagger-ui/index.html");
}
}
SwaggerConfig
@Configuration
public class SwaggerConfig {
@Bean
public Docket petApi() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("full-petstore-api")
.apiInfo(apiInfo())
.select()
.paths(any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("API")
.description("Service API")
.termsOfServiceUrl("http://springfox.io")
.contact(new Contact("springfox", "", ""))
.license("Apache License Version 2.0")
.licenseUrl("https://github.com/springfox/springfox/blob/master/LICENSE")
.version("2.0")
.build();
}
}
安全配置
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().anonymous().and().csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}
}
当我启动任务 'bootRun' 时,出现错误:
[ restartedMain] o.s.boot.SpringApplication: Application run failed
java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present
at java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117) ~[na:na]
at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125) ~[na:na]
...
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest
我尝试使用 SpringFox 演示项目示例和 SpringFox-Boot,但每次都会出现此错误。
Spring Boot 3.0 是为 Java17 和 JakartaEE 而构建的, 不是 JavaEE。 Spring Boot 3 仍在开发中,尚未看到最终版本。目前还没有正式发布日期,但预计不会早于 2022 年第 4 季度。在那之前我不会考虑 Spring Boot 3 用于生产(或者当他们开始发布候选版本时)。
也就是说,目前没有支持 JakartaEE 的 SpringFox 版本,因此不能与 Spring Boot 3 一起使用(参见 this)。所以在这个问题解决之前,SpringFox 和 Spring Boot 3 的组合将无法工作。
使用2.6.x(此时是Spring Boot的最新发布版本)。
我正在尝试使用 SpringFox。
Spring 引导版本:'org.springframework.boot:3.0.0-SNAPSHOT'
build.gradle
dependencies {
...
implementation 'io.springfox:springfox-petstore:2.10.5'
implementation "io.springfox:springfox-swagger2:3.0.0"
implementation "io.springfox:springfox-oas:3.0.0"
implementation 'io.springfox:springfox-swagger-ui:3.0.0'
...
}
Spring开机Class
@SpringBootApplication
@EnableSwagger2
@EnableOpenApi
public class ServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class, args);
}
}
SwaggerUiWebMvcConfigurer
@Component
public class SwaggerUiWebMvcConfigurer implements WebMvcConfigurer {
private final String baseUrl;
public SwaggerUiWebMvcConfigurer(
@Value("${springfox.documentation.swagger-ui.base-url:}") String baseUrl) {
this.baseUrl = baseUrl;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String baseUrl = StringUtils.trimTrailingCharacter(this.baseUrl, '/');
registry.
addResourceHandler(baseUrl + "/swagger-ui/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
.resourceChain(false);
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController(baseUrl + "/swagger-ui/")
.setViewName("forward:" + baseUrl + "/swagger-ui/index.html");
}
}
SwaggerConfig
@Configuration
public class SwaggerConfig {
@Bean
public Docket petApi() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("full-petstore-api")
.apiInfo(apiInfo())
.select()
.paths(any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("API")
.description("Service API")
.termsOfServiceUrl("http://springfox.io")
.contact(new Contact("springfox", "", ""))
.license("Apache License Version 2.0")
.licenseUrl("https://github.com/springfox/springfox/blob/master/LICENSE")
.version("2.0")
.build();
}
}
安全配置
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().anonymous().and().csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}
}
当我启动任务 'bootRun' 时,出现错误:
[ restartedMain] o.s.boot.SpringApplication: Application run failed
java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present
at java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117) ~[na:na]
at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125) ~[na:na]
...
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest
我尝试使用 SpringFox 演示项目示例和 SpringFox-Boot,但每次都会出现此错误。
Spring Boot 3.0 是为 Java17 和 JakartaEE 而构建的, 不是 JavaEE。 Spring Boot 3 仍在开发中,尚未看到最终版本。目前还没有正式发布日期,但预计不会早于 2022 年第 4 季度。在那之前我不会考虑 Spring Boot 3 用于生产(或者当他们开始发布候选版本时)。
也就是说,目前没有支持 JakartaEE 的 SpringFox 版本,因此不能与 Spring Boot 3 一起使用(参见 this)。所以在这个问题解决之前,SpringFox 和 Spring Boot 3 的组合将无法工作。
使用2.6.x(此时是Spring Boot的最新发布版本)。