#java #spring-boot #maven #swagger #swagger-codegen
#java #spring-boot #maven #swagger #swagger-codegen
Вопрос:
Я пытаюсь использовать Swagger Codegen для создания классов моделей для моего проекта spring boot. Я нашел несколько ссылок в Интернете и включил следующий плагин в свой pom.xml:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>
${project.basedir}/src/main/resources/Contract-v1.yml
</inputSpec>
<generatorName>spring</generatorName>
<apiPackage>${project.groupId}.swagger.api</apiPackage>
<modelPackage>${project.groupId}.swagger.model</modelPackage>
<supportingFilesToGenerate>
ApiUtil.java
</supportingFilesToGenerate>
<configOptions>
<sourceFolder>src/main/java/</sourceFolder>
<delegatePattern>true</delegatePattern>
<interfaceOnly>true</interfaceOnly>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
Я запускаю mvn install
, и классы генерируются в каталоге /target/generated-sources/openapi
. Но я не могу импортировать эти сгенерированные классы в свой класс контроллера REST.
Насколько я понимаю, <modelPackage>
поле используется для идентификации пакета, в который должны быть помещены сгенерированные классы. Я прав в этом?
Несмотря на то, что эти сгенерированные классы находятся в правильном пакете, поскольку их нет в src/main/java
, я, вероятно, не смогу импортировать их в другие классы.
Есть ли способ получить эти сгенерированные классы в src/main/java
каталоге или я что-то упустил в конфигурации maven, из-за чего эти файлы недоступны для других классов?
Ответ №1:
Я также хотел добиться того, что вы пытались, и, хотя сначала я ошибался, в конце концов я понял это, мне не нужно было делать ничего особенного. Одно предостережение заключается в том, что я использовал swagger-codegen-maven-plugin
вместо openapi-generator-maven-plugin
.
Вот как выглядит моя конфигурация в день последней swagger-codegen-maven-plugin
версии 3.0.35
. Когда я запускал mvn compile
, все мои классы были сгенерированы в целевой папке, а src main java был помечен как папка sources. Я смог напрямую реализовать свой собственный контроллер непосредственно в проекте, обратившись к API сгенерированного кода. Tbh документация swagger-codegen-maven-plugin
не самая лучшая, мне пришлось просмотреть несколько мест, чтобы понять смысл. Добавление некоторых ссылок
Общая конфигурация parameters:
https://github.com/swagger-api/swagger-codegen/tree/master/modules/swagger-codegen-maven-plugin
Параметры конфигурации:
https: //github.com/swagger-api/swagger-codegen/issues/7795
<plugin>
<groupId>io.swagger.codegen.v3</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>3.0.35</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/api-docs/swagger.yaml</inputSpec>
<generateApis>true</generateApis>
<generateModels>true</generateModels>
<generateSupportingFiles>false</generateSupportingFiles>
<language>spring</language>
<configOptions>
<basePackage>com.company.project</basePackage>
<apiPackage>com.company.project.api</apiPackage>
<modelPackage>com.company.project.model</modelPackage>
<interfaceOnly>true</interfaceOnly>
<sourceFolder>src/main/java</sourceFolder>
<hideGenerationTimestamp>true</hideGenerationTimestamp>
<dateLibrary>java11</dateLibrary>
<ignoreUnknownJacksonAnnotation>true</ignoreUnknownJacksonAnnotation>
<notNullJacksonAnnotation>true</notNullJacksonAnnotation>
<dateLibrary>false</dateLibrary>
<useBeanValidation>true</useBeanValidation>
<serializableModel>true</serializableModel>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
Ответ №2:
Для пользовательского интерфейса swagger вам необходимо указать зависимость и выполнить некоторые базовые конфигурации, а также в REST API вам необходимо внести несколько изменений
https://blog-api-rest.herokuapp.com/swagger-ui.html#/
Вы можете ссылаться на этот API, созданный с помощью Swagger
В основной файл приложения Spring boot включите следующий код
@SpringBootApplication
@EnableSwagger2
public class BlogappApplication {
public static void main(String[] args) {
SpringApplication.run(BlogappApplication.class, args);
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2).select()
.apis(RequestHandlerSelectors
.basePackage("com.example.blogapp.controller"))
.paths(PathSelectors.regex("/.*"))
.build().apiInfo(apiEndPointsInfo());
}
private ApiInfo apiEndPointsInfo() {
return new ApiInfoBuilder().title("Spring Boot REST API")
.description("Blog Application REST API")
.contact(new Contact("name", "url", "email id"))
.build();
}
}
И измените все контроллеры, как показано в приведенном ниже коде
@ApiOperation(value = "Deleting a comment", response = String.class)
@ApiParam(value = "Comment ID", required = true)
@ApiImplicitParam(name = "Authorization", value = "Access Token", required = true, allowEmptyValue = false, paramType = "header", dataTypeClass = String.class, example = "Bearer access_token")
@DeleteMapping
public String delete(@RequestParam String id){
return commentService.delete(id);
}
Перед использованием кодов перейдите по ссылке heroku swagger, которую я дал
Комментарии:
1. Вы объяснили, как настроить пользовательский интерфейс Swagger для проекта. Я смотрю, как использовать swagger code gen,