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

大摇大摆的UI,SpringDoc,OpenAPI 3.0:PostBody而不是textarea的UI字段?

轩辕成天
2023-03-14
  • SpringDoc 1.5.3(最新版本)
  • SwaggerUI 3.41.0(最新版本)

Swagger UI显示了@recestParam的好字段。

我有一个POSTendpoint,所以我使用了@ask estBody
我可以发送一个JSON,它解析成我的bodyhtml" target="_blank">对象。到目前为止还不错。

但是,Swagger UI只显示一个文本区域,我应该在其中放置整个JSON。这不太方便。

我希望Swagger UI为请求类的每个属性显示单独的字段;没有YAML,就有注释。尽管如此,如果没有其他选择,YAML解决方案也可以。

我找到的最接近的是对POST的@ParameterObject支持,这里讨论过:

class MyParam (
    val a: String,
    val b: SomeEnum,
    @field:Parameter(required = false)
    val someId: String?,
)

@PostMapping("/...", consumes = [ MediaType.APPLICATION_JSON_VALUE ])
fun addMyEntity(
      @ParameterObject param: MyParam
)

但是,这似乎是从查询参数构建对象。

在SpringFox中,曾经有@ApiModel@ApiModelParameter,我想这会实现。SpringDoc迁移页面建议将其替换为@Schema,但我不知道该怎么做。

有没有什么东西可以让Swagger UI以同样的方式显示类中的字段,但是从中组装一个JSON主体?Spring仍然会从身体中解析它?

也许是这样的:

fun addInsisPaymentRequest(
      @BodyObject param: MyParam
)

共有1个答案

赖翰
2023-03-14

我怀疑你提议的解决方案的可行性。原因是,POST/PUT请求接受一个请求主体,正如您所知,该请求主体可以接受任何有效的有效负载。

有效负载的范围可以从基本类型到应用程序使用的自定义对象。此外,数据类型不仅限于JSON,还可以是XML、HAL等。

此外,值得注意的一点是,任何有效的Json/Xml都可以具有递归对象。考虑下面的例子。

{
  "prop1": "val1",       // 1st order element
  "prop2": {             // 1st order element
    "sub-prop1": "val2", // 2nd order element
    "sub-prop2": [       // 2nd order element
      "val3",
      "val4"
    ]
  }

现在出现的问题是,您可以为所有这些参数提供类似于查询参数的表示,但是您将如何表示它们应该出现的顺序?

@ParameterObjects而言,它们大多是基元类型。虽然将它们作为复杂类型并非不可能,但我认为我们中的很多人并不经常这样做。

 类似资料:
  • 我在spring boot 2.3.1应用程序中添加了swagger ui,它在本地运行良好。 此应用程序部署在kubernetes集群中,但无法访问(没有入口) 相反,我们部署了另一个可以访问并可以调用此服务的spring boot应用程序。API调用可以很好地重定向,但swagger ui不起作用。 基本上,我的代理应用程序可以这样访问:https://app-dev.domain.io/pr

  • 我们在我们的泽西应用程序中使用了@Role允许注释来限制用户对应用编程接口某些部分的访问。我们如何在SwaggerUI中显示这些信息? 到目前为止,我已经用@ApiOperation注释了方法以显示in/out参数,并尝试使用@Authorization/@AuthorizationScope,但我只为我们不使用的oauth2显示了它。最接近out case的是ApiKeyAuthDefiniti

  • 编译得很好,但当我使用BootRun命令启动应用程序时,它失败了,原因是: 会有什么问题?不兼容Java9?那我能让它发挥作用吗?

  • 我试图通过在Swagger编辑器中编写文档然后将其加载到Swagger UI中使用Swagger来记录我的API。我使用编辑器并下载了我的 JSON 文件,然后使用以下命令将 UI 中的 /dist/index.html 文件更改为指向我的本地文件: 我在该文件中唯一更改的是使用了spec var来指向我的JSON文件,但是当我打开UI时,它显示一个空白的UI页面,并显示消息“已完成加载资源信息”

  • 我们在代理后运行服务,以便: 被路由到公共地址 或者从另一个角度定义: 当nginx在上接收到请求时,它会去掉前缀,并将请求传递给路径上的service。 在设置任何东西之前(使用默认的SpringDoc配置),我可以正确地看到超文本传输协议上的昂首阔步的文档://service-post: 8080/swagger-ui.html。 设置主机上公共地址的路径。com,我正在使用: 然而,这似乎完

  • 我们有一个。NET解决方案,有两个项目: null 当将Swagger UI添加到API项目(不是首选解决方案)时,它根本不起作用,可能是因为自定义控制器选择器 然而,我认为我遗漏了一些明显的东西,因为这感觉像是我们遗漏的一个非常基本的配置设置