Я пытаюсь реализовать swagger в своем весеннем проекте загрузки. Я искал в Интернете и обнаружил, что Springfox 3.0 может быть несовместим с Spring Boot 3.0. Пробовал и со старыми версиями. Но я не могу этого сделать. Я использую градиент.
ОШИБКА В ТЕРМИНАЛЕ
Build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.1'
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'practice.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '19'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation("io.springfox:springfox-swagger2:3.0.0")
}
tasks.named('test') {
useJUnitPlatform()
}
Основной java-файл
package practice.example.crud_practice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication
@EnableSwagger2
@RestController
public class CrudPracticeApplication {
public static void main(String[] args) {
SpringApplication.run(CrudPracticeApplication.class, args);
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any()) // this will include all controllers
.paths(PathSelectors.any())
.build();
}
@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("Hello %s!", name);
}
}
КОГДА Я ПРИСОЕДИНЯЮСЬ, ТЕРМИНАЛ ВЫХОДА СЛЕДУЮЩЕЙ ЛИНИИ НЕ ПОКАЗЫВАЕТ ОШИБКИ
@EnableSwagger2
Кажется, Springfox 3 несовместим с Spring Boot 3.
Причина:
HttpServletRequest
из пакета javax.servlet.http
.jakarta.servlet.http
через его tomcat-embed-core
зависимость.Решение: используйте Spring Boot 2.x
Если вы хотите использовать Springfox 3, вам, вероятно, следует придерживаться Spring Boot 2.x, чтобы иметь работающую систему.
Альтернатива: перейти на springdoc-openapi
Вместо этого вы также можете использовать springdoc-openapi v2 , который поддерживает Spring Boot 3. Я следовал руководству по миграции для вашего сценария, и он работал нормально (URL-адрес localhost:8080/v3/api-docs).
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
Docket
bean и springfox.springdoc.pathsToMatch=/**
в application.properties
ОК Решил. Большое спасибо за ваше время и усилия!