【问题标题】:Openapi generator cannot generate query param with enumOpenapi 生成器无法使用枚举生成查询参数
【发布时间】:2021-06-02 20:10:06
【问题描述】:

我正在尝试生成一个以枚举作为查询参数的服务,但它不断生成错误。 这是yaml的一部分:

      name: language
      in: query
      description: language
      schema:
        type: string
        enum:
        - en
        - de

我在参数中使用它:

        - $ref: '#/components/parameters/language'

我得到的错误是:

[ERROR] .../api/TestApi.java:[110,65] illegal start of type
[ERROR] .../api/TestApi.java:[110,66] ')' expected
[ERROR] .../api/TestApi.java:[110,82] ';' expected

代码如下:

public Response getByLanguage( @PathParam("id") Long id, , allowableValues="en, de" @QueryParam("language") String language

这是我的插件:

                <plugin>
                    <groupId>org.openapitools</groupId>
                    <artifactId>openapi-generator-maven-plugin</artifactId>
                    <version>5.0.1</version>
                    <configuration>
                        <inputSpec>${basedir}/src/main/resources/openapi.yaml</inputSpec>
                        <output>${project.build.directory}/generated-sources/java</output>
                        <generatorName>jaxrs-resteasy-eap</generatorName>
                        <modelPackage>com.openapi.example.model</modelPackage>
                        <apiPackage>com.openapi.example.api</apiPackage>
                        <generateSupportingFiles>false</generateSupportingFiles>
                        <configOptions>
                            <sourceFolder>openapi</sourceFolder>
                            <dateLibrary>java8</dateLibrary>
                            <interfaceOnly>true</interfaceOnly>
                            <java8>true</java8>
                            <serializableModel>true</serializableModel>
                            <useTags>true</useTags>
                            <performBeanValidation>true</performBeanValidation>
                            <useBeanValidation>true</useBeanValidation>
                        </configOptions>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>generate-resources</phase>
                            <id>generate</id>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

我设法让它工作的唯一方法是将它作为一个枚举值数组,但这不是我在这里需要的。

编辑: 我在项目中定义的依赖项:

        <dependency>
            <groupId>org.apache.maven.shared</groupId>
            <artifactId>maven-dependency-analyzer</artifactId>
            <version>1.11.1</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-jaxrs</artifactId>
            <version>1.5.8</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>2.1.5</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jsr310</artifactId>
            <version>2.11.3</version>
        </dependency>

【问题讨论】:

    标签: java generator openapi


    【解决方案1】:

    试试下面的演示 yaml。

    枚举应定义为 enum: [en, de]。

    openapi: 3.0.2
    info: {title: Demo Info., description: Demo Description., version: 1.0.0}
    servers:
    - {url: 'https://something.com', description: Demo Description.}
    paths:
      /something:
        post:
          tags: [Something]
          requestBody:
            required: true
            content:
              application/json:
                schema: {$ref: '#/components/schemas/SomethingRequest'}
          parameters:
          - {$ref: '#/components/parameters/language'}
          responses:
            200:
              description: OK
              content:
                application/json:
                  schema: {$ref: '#/components/schemas/SomethingResponse'}
    components:
      parameters:
        language:
          name: language
          schema:
            type: string
            enum: [en, de]
            default: en
          in: query
      schemas:
        SomethingRequest:
          properties:
            demo: {type: string}
        SomethingResponse:
          properties:
            demo: {type: string}
    

    【讨论】:

    • 不幸的是,这也不起作用:public Response somethingPost(@ApiParam(value = "" ,required=true) @NotNull @Valid SomethingRequest somethingRequest, , allowableValues="en, de" @DefaultValue("en") @QueryParam("language") String language,@Context SecurityContext securityContext); 如您所见,又是那个双逗号
    • @StopTheRain 它对我来说很好。可能需要仔细查看 Maven 配置。您能否使用最少的 POM 详细信息(例如您正在使用的依赖项)更新问题。
    • 我用我拥有的所有依赖项更新了这个问题。 POM 中唯一定义的其他东西是我提供的插件。你能把你的插件配置发给我吗?
    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多