当前位置: 首页 > 知识库问答 >
问题:

Swagger为默认响应主体生成的常量太长

苏华藏
2023-03-14

基本上,它需要生成有效的Java8模型和控制器类与swagger-codemen-maven-plugin。

我有swagger 2.0规范,包含带有数组字段的模型定义,其中每个数组项依次包含自己的模型数组。

Swagger成功生成java模型和带注释的接口,该接口包含默认响应体,表示根模型及其所有子模型的自动生成json响应示例。实际上,这是一个问题:

对于每个数组字段,swagger总是为每个项目的数组字段生成2个项目,再为每个项目的数组字段生成2个子项目,以此类推,这在java中会导致非常长的字符串常量。Swagger生成这个字符串没有任何问题,但java compier就是无法处理它,并出现编译错误:常量字符串太长。

我试图找到一种方法来减少模型数组中的元素数量,或者完全禁用示例体生成。看起来没有明显的配置来控制这个。

有没有办法禁用默认正文生成或任何其他东西来控制生成的字符串长度?

无法提交自动生成的代码,因此无法手动修复生成的代码并在以后使用。需要在swagger codegen插件完成后获得可编译的java代码。

有一个codegen maven配置,用于生成源代码(针对2.3.1和2.4.0版本进行了测试):

 <plugin>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-codegen-maven-plugin</artifactId>
                <version>2.3.1</version>
                <configuration>
                    <configOptions>
                        <sourceFolder>java</sourceFolder>
                        <dateLibrary>java8</dateLibrary>
                    </configOptions>
                    <generateSupportingFiles>false</generateSupportingFiles>
                    <addCompileSourceRoot>false</addCompileSourceRoot>
                    <generateApiDocumentation>false</generateApiDocumentation>
                    <generateApiTests>false</generateApiTests>
                    <generateModelDocumentation>false</generateModelDocumentation>
                    <generateModelTests>false</generateModelTests>
                    <ignoreFileOverride>${project.basedir}</ignoreFileOverride>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

共有2个答案

邓开济
2023-03-14

在我的场景中,我没有存根,因此给出了一个空字符串作为模型的例子

modelName:
  type: object
  example: '' 
  properties:
盖嘉庆
2023-03-14

终于,我找到了问题所在。

诀窍在于为响应添加示例部分,它覆盖了swagger中默认的示例生成。

swagger generator本身仍然存在一个问题——它无法为大型响应模型生成有效的java代码,并且仍然受到java常量字符串长度的限制。

工作响应规范部分如下所示:

    responses:
     200:
      description: Some text
      schema:
       $ref: '#/definitions/Model'
      examples:
       stub:
 类似资料:
  • 我的api如下所示: 对于查询,我们只想允许查询枚举中列出的某些属性,如下所示: 我加了 在启动阶段。cs,但这不适用于默认值,我得到以下生成的虚张声势,默认值为0而不是字符串: 如何使默认值显示为字符串?

  • 我寻找一些配置,我可以改变接口的名称,已生成,但没有找到解决方案。 对此有什么想法吗??

  • 我想在Swagger-PHP中为POST请求指定默认的JSON正文。我的注释如下所示: 如您所见,我正试图使用<code>default={}实现默认值,但Swagger UI忽略此值,并将‘string’作为默认值: 如何将“字符串”部分更改为默认的JSON对象?

  • 目前正在使用springfox 2.9.2大摇大摆地记录Spring中创建的API。我想在文档中添加示例响应,如下图所示; 我的理解是,我可以做类似的事情: 在本例中,我将此代码片段放在方法的正上方。不幸的是,上面的两个示例总是显示:标识符预期错误 但我也看到我也能做到这一点: 我还看到我可以添加一个级别的示例: 我的问题是: > 将Swagger/Springfox指向my model/bean

  • 我创建了一个管道,它从CodeCommit存储库获取代码,通过CodeBuild构建代码,并将代码推送到S3存储桶中。 对于我的代码构建,我使用的是AWS管理的映像。aws/codebuild/nodejs:7.0。0 如果我通过CodeBuild控制台手动启动构建并指定存储库,则在buildspec中运行以下命令时会获得存储库URL 但是如果代码构建是由推送到存储库自动触发的。CODEBUILD

  • 我如何在从下面的API生成的swagger中定义属性的默认值? Swashbuckle生成OrderDirection作为所需参数。我希望它是可选的,并向客户机指示默认值(不确定swagger是否支持此选项)。 我不喜欢使属性类型为空。还有其他选择吗?理想情况下使用内置类... 我用的是虚张声势的皮带扣。AspNetCore-https://docs.microsoft.com/en-us/asp