java - swagger-maven-plugin 不生成键和值,导致“空”swagger.json
问题描述
我的 swagger.json 文件中缺少所有 api 和 model 属性。我在使用 maven install 时提供了我的 pom.xml、带有注释的 restcontroller、swagger.json 和 stacktrace
我将 openapi-generator 的 inputSpecs 配置为使用 swagger.json 文件,并将 swagger-maven-plugin 配置为从给定位置 com.mart.controller 生成
pom.xml 文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<dependencies>
<dependency>
<groupId>com.mart11.backend</groupId>
<artifactId>mart11-backend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<properties>
<nodeVersion>v14.16.0</nodeVersion>
<npmVersion>7.6.0</npmVersion>
<resources.generated>${project.build.directory}/generated-resources</resources.generated>
<sources.generated>${project.build.directory}/generated-sources</sources.generated>
<swagger.json.output>${resources.generated}/swagger</swagger.json.output>
<swagger.templates.folder>${project.basedir}/swagger</swagger.templates.folder>
<swagger.ts.output>${sources.generated}/swagger</swagger.ts.output>
<swagger.html.output>${project.build.directory}/classes/public/swagger</swagger.html.output>
</properties>
<build>
<plugins>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>initialize</phase>
<configuration>
<target>
<mkdir dir="${project.build.directory}/classes"/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${project.parent.groupId}</groupId>
<artifactId>mart11-backend</artifactId>
<version>0.0.1-SNAPSHOT</version>
</artifactItem>
</artifactItems>
<outputDirectory>${resources.generated}</outputDirectory>
<includes>swagger/**/*.mustache</includes>
</configuration>
<executions>
<execution>
<id>unpack mustache template</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.github.kongchen</groupId>
<artifactId>swagger-maven-plugin</artifactId>
<version>${com.github.kongchen.swagger-maven-plugin.version}</version>
<executions>
<execution>
<id>Generate Swagger JSON</id>
<goals>
<goal>generate</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<apiSources>
<apiSource>
<schemes>https</schemes>
<basePath>localhost:8080/</basePath>
<springmvc>true</springmvc>
<locations>
<location>com.mart11.controller</location>
</locations>
<info>
<title>${project.name}</title>
<version>${project.version}</version>
</info>
<swaggerDirectory>${swagger.json.output}</swaggerDirectory>
</apiSource>
</apiSources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>${openapi-generator-maven-plugin.version}</version>
<executions>
<execution>
<id>Generate TypeScript API</id>
<goals>
<goal>generate</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<inputSpec>${swagger.json.output}/swagger.json</inputSpec>
<generatorName>typescript-angular</generatorName>
<output>${swagger.ts.output}</output>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
我的休息控制器:
import com.mart11.dto.ReserveTableDTO;
import com.mart11.service.ReservationTableService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.sql.SQLException;
import java.util.List;
@Api(value = "ReservationApi")
@RequestMapping
@RestController
public class ReservationController {
private static final Logger LOGGER = LoggerFactory.getLogger(ReservationController.class);
private final ReservationTableService reservationTableService;
public ReservationController(ReservationTableService reservationTableService) {
this.reservationTableService = reservationTableService;
}
@ApiOperation("Return account settings for the user")
@GetMapping(value = "/api/getAllByDate", produces = MediaType.APPLICATION_JSON_VALUE)
@ApiResponses({
@ApiResponse(code = 200, message = "", response = List.class),
@ApiResponse(code = 500, message = "", response = SQLException.class)
})
public @ResponseBody
List<ReserveTableDTO> getAllReservationsByDate(@RequestParam String date) throws SQLException {
LOGGER.debug("JSON/REST GET call on /api/getAllByDate for date '{}'", date);
return reservationTableService.getAllTablesByDate(date);
}
}
生成的 swagger.json 文件:
{
"swagger" : "2.0",
"info" : {
"version" : "0.0.1-SNAPSHOT",
"title" : "Mart 11 Frontend"
},
"basePath" : "localhost:8080/",
"schemes" : [ "https" ]
}
Maven 安装堆栈跟踪:
[INFO] --- maven-dependency-plugin:3.1.2:unpack (unpack mustache template) @ mart11-frontend ---
[INFO] Configured Artifact: com.mart11:mart11-backend:0.0.1-SNAPSHOT:jar
[INFO] Unpacking C:\Users\aleks\mart11-reservation\mart11-backend\target\mart11-backend-0.0.1-SNAPSHOT.jar to C:\Users\aleks\mart11-reservation\mart11-frontend\target\generated-resources with includes "swagger/**/*.mustache" and excludes ""
[INFO]
[INFO] --- swagger-maven-plugin:3.1.7:generate (Generate Swagger JSON) @ mart11-frontend ---
[INFO] Reflections took 43 ms to scan 99 urls, producing 0 keys and 0 values
[INFO] Reflections took 23 ms to scan 99 urls, producing 0 keys and 0 values
[INFO] Reflections took 18 ms to scan 99 urls, producing 0 keys and 0 values
[INFO] Reflections took 15 ms to scan 99 urls, producing 0 keys and 0 values
[INFO] Reflections took 16 ms to scan 99 urls, producing 0 keys and 0 values
[INFO] Reflections took 15 ms to scan 99 urls, producing 0 keys and 0 values
[INFO] Reflections took 15 ms to scan 99 urls, producing 0 keys and 0 values
[INFO] Reflections took 20 ms to scan 99 urls, producing 0 keys and 0 values
[INFO]
[INFO] --- openapi-generator-maven-plugin:5.0.0:generate (Generate TypeScript API) @ mart11-frontend ---
[WARNING] C:\Users\aleks\mart11-reservation\mart11-frontend\target\generated-resources\swagger\swagger.json [0:0]: unexpected error in Open-API generation
org.openapitools.codegen.SpecValidationException: There were issues with the specification. The option can be disabled via validateSpec (Maven/Gradle) or --skip-validate-spec (CLI).
| Error count: 1, Warning count: 0
Errors:
-attribute paths is missing
at org.openapitools.codegen.config.CodegenConfigurator.toContext (CodegenConfigurator.java:541)
at org.openapitools.codegen.config.CodegenConfigurator.toClientOptInput (CodegenConfigurator.java:568)
at org.openapitools.codegen.plugin.CodeGenMojo.execute (CodeGenMojo.java:717)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:566)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
[ERROR]
org.openapitools.codegen.SpecValidationException: There were issues with the specification. The option can be disabled via validateSpec (Maven/Gradle) or --skip-validate-spec (CLI).
| Error count: 1, Warning count: 0
Errors:
-attribute paths is missing
at org.openapitools.codegen.config.CodegenConfigurator.toContext (CodegenConfigurator.java:541)
at org.openapitools.codegen.config.CodegenConfigurator.toClientOptInput (CodegenConfigurator.java:568)
at org.openapitools.codegen.plugin.CodeGenMojo.execute (CodeGenMojo.java:717)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:566)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for mart11 0.0.1-SNAPSHOT:
[INFO]
[INFO] mart11 ............................................. SUCCESS [ 0.293 s]
[INFO] Mart 11 Backend .................................... SUCCESS [ 2.369 s]
[INFO] Mart 11 Frontend ................................... FAILURE [ 4.294 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
解决方案
推荐阅读
- angularjs - 有没有办法将图表或带有仪表板的图表放在 AngularJS 项目中?
- java - 调用 startActivity() 时获得相同的屏幕
- excel - 是否可以读取 Excel 表并纯粹在前端显示其内容?
- jmeter - 如何从仪表板报告中保存图表(JMeter)
- c# - VSTO,更改word文档中所有图片的大小以适应页面宽度
- android - Fleetboard 上的 TLS 1.2
- pine-script - 我正在尝试使用“更改”功能添加条件
- c++ - 如何将两组与自定义数据类型进行比较
- groovy - 断言中缺少属性,应该使用哪个断言来一一检查json
- excel - 对于 IF Else 循环在单元格为空时不会停止