Spring boot I';我用openapi生成器maven插件生成了我的API服务器现在怎么办?

Spring boot I';我用openapi生成器maven插件生成了我的API服务器现在怎么办?,spring-boot,openapi-generator,Spring Boot,Openapi Generator,我一定错过了什么,很明显我的墓志铭。我创建了一个swagger 2.0文档来表示一个简单的API。它有一个返回整数的POST操作。我在Spring Boot项目中使用openapi生成器maven插件生成控制器、模型等 如何创建控制器来处理请求? 查看/workqueueapi/target/generatedsources/openapi/src/main/java我看到了三件事ApiUtil.java,WorkItemApi.java(接口),WorkItemApiController.ja

我一定错过了什么,很明显我的墓志铭。我创建了一个swagger 2.0文档来表示一个简单的API。它有一个返回整数的POST操作。我在Spring Boot项目中使用openapi生成器maven插件生成控制器、模型等

如何创建控制器来处理请求?

查看
/workqueueapi/target/generatedsources/openapi/src/main/java
我看到了三件事
ApiUtil.java
WorkItemApi.java
(接口),
WorkItemApiController.java
(实现)

我在应用程序中创建了一个新的控制器,该控制器实现WorkItemApicController。但当我这样做的时候,Spring抱怨它的方法已经被映射了

API“工作”的原因是我可以启动它并使用招摇过市的UI发布。但显然,请求并没有得到实际处理,而是返回了一个默认响应。生成的界面粘贴在下面。它有一个实现方法。我希望能够在该方法中调用服务。或者重写它的方法

以下是WorkItemApi的生成接口

/**
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (4.0.2).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */
package com.etisoftware.work_queue.webapi.controller.v1;

import com.etisoftware.work_queue.webapi.model.v1.Error;
import com.etisoftware.work_queue.webapi.model.v1.NewWorkItem;
import com.etisoftware.work_queue.webapi.model.v1.WorkItemResponse;
import io.swagger.annotations.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import javax.validation.constraints.*;
import java.util.List;
import java.util.Map;
import java.util.Optional;

@Validated
@Api(value = "WorkItem", description = "the WorkItem API")
public interface WorkItemApi {

    default Optional<NativeWebRequest> getRequest() {
        return Optional.empty();
    }

    @ApiOperation(value = "Adds a new workItem", nickname = "v1WorkItemsPost", notes = "", response = WorkItemResponse.class, tags={ "workItem", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = WorkItemResponse.class),
        @ApiResponse(code = 201, message = "Successful operation", response = WorkItemResponse.class),
        @ApiResponse(code = 400, message = "Bad Request", response = Error.class),
        @ApiResponse(code = 401, message = "Unauthorized"),
        @ApiResponse(code = 403, message = "Forbidden", response = Error.class),
        @ApiResponse(code = 404, message = "Not Found"),
        @ApiResponse(code = 500, message = "Internal server error", response = Error.class) })
    @RequestMapping(value = "/v1/work-items",
        produces = { "application/problem+json", "application/json" }, 
        consumes = { "application/json" },
        method = RequestMethod.POST)
    default ResponseEntity<WorkItemResponse> v1WorkItemsPost(@ApiParam(value = "Parameters to represent a new work item." ,required=true )  @Valid @RequestBody NewWorkItem newWorkItem) {
        getRequest().ifPresent(request -> {
            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                    ApiUtil.setExampleResponse(request, "application/json", "{  \"controllerWorkNumber\" : 0.8008281904610115}");
                    break;
                }
            }
        });
        return new ResponseEntity<>(HttpStatus.valueOf(200));

    }

}

/**
*注意:这个类是由OpenAPI生成器自动生成的(https://openapi-generator.tech) (4.0.2).
* https://openapi-generator.tech
*不要手动编辑该类。
*/
包com.etisoftware.work_queue.webapi.controller.v1;
导入com.etisoftware.work_queue.webapi.model.v1.Error;
导入com.etisoftware.work_queue.webapi.model.v1.NewWorkItem;
导入com.etisoftware.work_queue.webapi.model.v1.WorkItemResponse;
导入io.swagger.annotations.*;
导入org.springframework.http.HttpStatus;
导入org.springframework.http.MediaType;
导入org.springframework.http.ResponseEntity;
导入org.springframework.validation.annotation.Validated;
导入org.springframework.web.bind.annotation.PathVariable;
导入org.springframework.web.bind.annotation.RequestBody;
导入org.springframework.web.bind.annotation.RequestHeader;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.bind.annotation.RequestParam;
导入org.springframework.web.bind.annotation.RequestPart;
导入org.springframework.web.context.request.NativeWebRequest;
导入org.springframework.web.multipart.MultipartFile;
导入javax.validation.Valid;
导入javax.validation.constraints.*;
导入java.util.List;
导入java.util.Map;
导入java.util.Optional;
@验证
@Api(value=“工作项”,description=“工作项Api”)
公共接口WorkItemApi{
默认可选getRequest(){
返回可选的.empty();
}
@ApiOperation(value=“添加新工作项”,昵称=“v1WorkItemsPost”,notes=“”,response=WorkItemResponse.class,标记={“workItem”,})
@ApiResponses(值={
@ApiResponse(代码=200,消息=“OK”,响应=WorkItemResponse.class),
@ApiResponse(代码=201,消息=“成功操作”,响应=WorkItemResponse.class),
@ApiResponse(代码=400,消息=“错误请求”,响应=Error.class),
@ApiResponse(code=401,message=“Unauthorized”),
@ApiResponse(代码=403,消息=“禁止”,响应=Error.class),
@ApiResponse(代码=404,message=“未找到”),
@ApiResponse(代码=500,消息=“内部服务器错误”,响应=error.class)})
@请求映射(value=“/v1/工作项”,
生成={“应用程序/问题+json”,“应用程序/json”},
使用={“应用程序/json”},
method=RequestMethod.POST)
默认响应属性v1WorkItemsPost(@ApiParam(value=“表示新工作项的参数”,required=true)@Valid@RequestBody NewWorkItem NewWorkItem){
getRequest().ifPresent(请求->{
for(MediaType MediaType:MediaType.parseMediaTypes(request.getHeader(“Accept”)){
if(mediaType.isCompatibleWith(mediaType.valueOf(“application/json”)){
setExampleResponse(请求,“application/json”,“controllerWorkNumber\”:0.8008281904610115});
打破
}
}
});
返回新的响应属性(HttpStatus.valueOf(200));
}
}
pom.xml中的插件配置

org.openapitools
openapi生成器maven插件
4.0.2
生成
${project.basedir}/src/main/resources/swagger.yaml
春天
真的
com.etisoftware.work\u队列
com.etisoftware.work_queue.webapi.configuration
com.etisoftware.work_queue.webapi.controller.v1
com.etisoftware.work_queue.webapi.model.v1
com.etisoftware.work\u队列
真的
真的
真的
真的
假的
爪哇8
真的

解决方案是我使用了一个较旧版本的插件。版本4.2.3包括配置选项,以排除控制器的生成,这正是我所需要的

      <plugin>
        <groupId>org.openapitools</groupId>
        <artifactId>openapi-generator-maven-plugin</artifactId>
        <version>4.2.3</version>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
            <configuration>
              <inputSpec>${project.basedir}/src/main/resources/swagger.yaml</inputSpec>
              <generatorName>spring</generatorName>
              <addCompileSourceRoot>true</addCompileSourceRoot>
              <configOptions>
                <basePackage>com.etisoftware.work_queue</basePackage>
                <configPackage>
                  com.etisoftware.work_queue.webapi.configuration
                </configPackage>
                <apiPackage>
                  com.etisoftware.work_queue.webapi.controller.v1
                </apiPackage>
                <modelPackage>
                  com.etisoftware.work_queue.webapi.model.v1
                </modelPackage>
                <invokerPackage>
                  com.etisoftware.work_queue
                </invokerPackage>
                <swaggerDocketConfig>true</swaggerDocketConfig>
                <useOptional>true</useOptional>
                <returnSuccessCode>true</returnSuccessCode>
                <useTags>true</useTags>
                <virtualService>false</virtualService>
                <dateLibrary>java8</dateLibrary>
                <hideGenerationTimestamp>true</hideGenerationTimestamp>
                <interfaceOnly>true</interfaceOnly>
                <skipDefaultInterface>true</skipDefaultInterface>
              </configOptions>
            </configuration>
          </execution>
        </executions>
      </plugin>

org.openapitools
openapi生成器maven插件
4.2.3
生成
${project.basedir}/src/main/resources/swagger.yaml
春天
真的
com.etisoftware.work\u队列
com.etisoftware.work_queue.webapi.configuration
com.etisoftware.work_queue.webapi.control
      <plugin>
        <groupId>org.openapitools</groupId>
        <artifactId>openapi-generator-maven-plugin</artifactId>
        <version>4.2.3</version>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
            <configuration>
              <inputSpec>${project.basedir}/src/main/resources/swagger.yaml</inputSpec>
              <generatorName>spring</generatorName>
              <addCompileSourceRoot>true</addCompileSourceRoot>
              <configOptions>
                <basePackage>com.etisoftware.work_queue</basePackage>
                <configPackage>
                  com.etisoftware.work_queue.webapi.configuration
                </configPackage>
                <apiPackage>
                  com.etisoftware.work_queue.webapi.controller.v1
                </apiPackage>
                <modelPackage>
                  com.etisoftware.work_queue.webapi.model.v1
                </modelPackage>
                <invokerPackage>
                  com.etisoftware.work_queue
                </invokerPackage>
                <swaggerDocketConfig>true</swaggerDocketConfig>
                <useOptional>true</useOptional>
                <returnSuccessCode>true</returnSuccessCode>
                <useTags>true</useTags>
                <virtualService>false</virtualService>
                <dateLibrary>java8</dateLibrary>
                <hideGenerationTimestamp>true</hideGenerationTimestamp>
                <interfaceOnly>true</interfaceOnly>
                <skipDefaultInterface>true</skipDefaultInterface>
              </configOptions>
            </configuration>
          </execution>
        </executions>
      </plugin>