swaggerui,springdoc,openapi3.0:post body而不是textarea的ui字段?

nom7f22z  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(431)

springdoc 1.5.3(最新版本)
swaggerui 3.41.0(最新版本)
swagger 的用户界面显示了很好的领域 @RequestParam .
我有一个后端点,所以我用 @RequestBody .
我可以发送一个json并解析到我的body对象中。到现在为止,一直都还不错。
但swaggerui只显示了一个textarea,我应该把整个json放在这里。不太方便。
我希望swaggerui为请求类的每个属性显示单独的字段;没有yamls,只有注解。不过,如果没有其他选择,yaml解决方案是可以的。
我找到的最接近的是 @ParameterObject 支持post,讨论如下:

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
)

但是,这似乎是从查询参数构建对象。
在斯普林福克斯,曾经有 @ApiModel 以及 @ApiModelParameter ,我想会这样。springdoc迁移页面建议用 @Schema ,但我不知道怎么做。
有没有什么东西可以让swagger ui以同样的方式显示类中的字段,但从中组装一个json体?spring还会从身体里解析它吗?
可能是这样的:

fun addInsisPaymentRequest(
      @BodyObject param: MyParam
)
smtd7mpg

smtd7mpg1#

我怀疑你提出的解决办法的可行性。原因是,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"
    ]
  }

现在出现的问题是,对于所有的查询参数,可以有一个类似于我们的表示法,但是如何表示它们应该出现的顺序呢?
至于 @ParameterObject 它们大多是原始类型。尽管将它们作为复杂类型并非不可能,但我认为我们中的很多人并不经常这样做。

相关问题