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

使用LinkedHashMap而不是HashMap作为Swagger字典类型(Java codegen)?

曾嘉荣
2023-03-14

我使用的是openapi 3.0.2和codegen插件:

<groupId>io.swagger.codegen.v3</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>3.0.14</version>

我使用的是这里描述的swagger Dictionary/HashMap类型:

openapi: "3.0.2"
...
Labels:
    type: object
    additionalProperties:
        type: string
        minLength: 1
    description:  A description.
@ApiModel(description = "A description.")
@Validated
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-02-26T12:17:36.248Z[Europe/London]")
public class Labels extends HashMap<String, String>  {
...
}

我想在将这本词典归还给客户时控制其条目的顺序。

共有1个答案

东郭自珍
2023-03-14

我使用了一个maven插件来修改生成的文件:

<plugin>
        <groupId>org.codehaus.gmavenplus</groupId>
        <artifactId>gmavenplus-plugin</artifactId>
        <executions>
                <execution>
                        <id>modify-swagger</id>
                        <phase>generate-sources</phase>
                        <goals>
                                <goal>execute</goal>
                        </goals>
                        <configuration>
                                <properties>
                                        <property>
                                                <name>targetDir</name>
                                                <value>${project.build.directory}</value>
                                        </property>
                                </properties>
                                <scripts>
                                        <script><![CDATA[
                                                def labelsFile = new File(targetDir
                                                                + "/swagger-codegen/src/main/java/com/acme/models/Labels.java")
                                                def labelsFileContents = labelsFile.text
                                                if (labelsFileContents == null) {
                                                        throw Exception();
                                                }

                                                def newLabelsFileContents = labelsFileContents.replaceAll('HashMap', 'LinkedHashMap')
                                                labelsFile.write(newLabelsFileContents)
                                        ]]></script>
                                </scripts>
                        </configuration>
                </execution>
        </executions>
</plugin>
 类似资料:
  • 是否有任何方法可以在模型部分定义HashMap或泛型对象类型?我有一个返回产品的REST服务,这些产品可以有不同的选择。options属性基本上是一个HashMap,其中id是选项名,其值是选项值。

  • 我正在尝试使用和对的输出进行排序。 当我使用来整理时,它的工作方式非常好。 输出: 谁能告诉我为什么这种排序不起作用?becuase正在过滤吗? 这是为什么不受该问题的影响吗? 谢谢

  • 问题内容: 我有类似的xml 除了在父对象内部创建消息对象外,我还需要将消息表示为String。因此,当我执行parent.message时,输出将代替消息对象。 问题答案: idia将通过处理来建立消息的xml 。如果不幸地调用失败,则不会返回此元素的全部内容。 模型 转换器 这个测试 打印出来 但这不是所有相同的内容!例如,它会忽略空格,它们会映射到空白,而我并未测试XML实体,例如etc。

  • 我有一个有内部地图的POJO。我想将它从JSON反序列化为HashMap,但Jackson将JSON的内部映射反序列化为LinkedHashMap。我可以通过将映射的类型从“Map”更改为“HashMap”来强制它使用HashMap,但我想知道是否有方法告诉Jackson将反序列化为Map的特定实现? 这里是JSON: 和转换类: 如何使用ObjectMapper:

  • 我有一个使用swagger UI的swagger标记文档,它总是返回text/html,但应该返回application/json。POST请求和其他类型返回Application/JSON,但这个特定的GET请求不返回。服务endpoint代码正确。如果我将请求更改为POST,它将返回application/json。因此,在swagger中只有type GET不返回正确的类型。有什么想法,如何

  • 问题内容: 我必须怎么做才能将自定义类型的对象用作Python字典中的键(我不希望“对象id”用作键),例如 如果名称和位置相同,我想将MyThing用作相同的键。从C#/ Java开始,我习惯于重写并提供一个equals和hashcode方法,并保证不会突变该hashcode依赖的任何内容。 我必须在Python中做什么才能完成此任务?我应该吗? (在一个简单的例子中,就像这里一样,也许最好将一