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

如何在OpenApi Spring上添加不同的@模式描述?

邹嘉致
2023-03-14

我在使用OpenApi和Spring定义API时遇到了一些问题。我正在使用此依赖项:

<dependency>
   <groupId>org.springdoc</groupId>
   <artifactId>springdoc-openapi-ui</artifactId>
   <version>1.5.2</version>
</dependency>

我的问题是,我想在不同的Api响应上定义一个@模式,但在每个响应中使用不同的描述和示例。

现在我有一个这样的回答:

public class LoginResponse {

    @Schema(description = "User identifier", example = "12")
    private Long id;
    @Schema(description = "User balance", example = "{"type":"COINS","amount":1000}")
    private Balance balance;
...

还有其他类似的反应。。。

public class ModifyBalanceResponse {

    @Schema(description = "User identifier", example = "12")
    private Long id;
    @Schema(description = "Added balance", example = "{"type":"COINS","amount":500}")
    private Balance addedBalance;
    @Schema(description = "Updated balance", example = "{"type":"COINS","amount":1500}")
    private Balance updatedBalance;
...

因此,我有三个不同描述和示例的对象“Balance”,但当它生成文档时,使用该对象的所有响应和字段都采用相同的描述和示例。

我已经看到,在生成的文件中,我将所有这些项目都带有“$ref”标签到Balance模式,并且这是在只定义了一个描述/示例的情况下生成的,如下所示:

addedBalance:
   $ref: '#components/schemas/Balance'

我试图手动编辑该文件,通过将其替换为。。。

addedBalance:
   title: Balance
   description: Added balance
   example: '{"type":"COINS","amount":500}'

有没有办法用openapi提供的Spring注释来做这样的事情?有点像忽略schema对象,从字面上理解描述和示例。我不介意它是否引用到schema对象。

感谢您的惠顾。

共有2个答案

周马鲁
2023-03-14

您还可以在类中使用泛型来强制SpringDoc将其视为不同的类型。

public static class Balance<T> {
   ...
}

public static class ModifyBalanceResponse {

    @Schema(description = "User identifier", example = "12")
    private Long id;
    @Schema(description = "Added balance", example = "{"type":"COINS","amount":500}")
    private Balance<Added> addedBalance;
    @Schema(description = "Updated balance", example = "{"type":"COINS","amount":1500}")
    private Balance<Updated> updatedBalance;
}

public static class Added {}
public static class Updated {}
弓胜泫
2023-03-14

这很蹩脚,但您可以通过为每个项目创建不同的响应类来解决这个问题。

public class AddedBalance extends Balance {}
public class UpdatedBalance extends Balance {}

一定有更好的解决办法...

 类似资料:
  • 我有一个由maven管理依赖关系的多模块项目。 我在子模块“插件”中有多个插件。我想在不同的场景中添加不同的插件,但在每个场景中都需要一些插件。 “插件”模块中的pom.xml。 无论我运行“mvn包”还是“mvn包-P内部”,它只包含第二个模块作为依赖项。有人知道原因吗? 我的maven版本是3.3.9

  • 大家好,这是我第一次在这里发帖。我的问题是我如何添加不同的悬停效果从一个div的元素。 我有一个包含3个元素的div:一个img,一个按钮和一个段落,我已经在div上有一个缩放效果来改变整个容器的大小,但我也想改变按钮的颜色,当悬停在div的任何地方时,不一定是在按钮上。同样适用于IMG。 分区: 程式化

  • 我可以毫无问题地实现模态抽屉。但是我想在同一个屏幕上添加两个模态抽屉,一个从左边,一个从右边。在xml中很容易做到,但是我不知道如何在Jetpack中做到这一点。

  • 问题内容: 我正在尝试向文档中添加一个新字段,但这不起作用: 创建我的UserModel原型: 然后叫它 只要存在,此字段便会成功更新,但不会添加任何新字段。 问题答案: 您可以使用选项在架构中添加和删除字段 选项:严格 严格选项(默认情况下启用)可确保传递给我们的模型构造函数的未在架构中指定的值不会保存到数据库中。 您也可以在更新查询中执行此操作 您可以在这里查看文档

  • 我试图构建一个通过扫描仪构建的整数ArrayList。用户必须输入5到10个整数才能使ArrayList有效,但在运行程序时,实际输入数将是未知的。 如何构建程序,使其只在用户输入5、6、7、8、9或10个整数时运行?

  • 我希望在相同的主机上创建,但使用不同的模式。我想在测试模式上创建特定于应用程序的表,在batchmetadata模式上创建元数据表。 错误: 我浏览了如下链接:不同模式中的Spring-batch元数据表和不同模式中的Spring批处理表,但code仍然在测试模式上生成。 Application.Properties 新错误: