【问题标题】:Swagger Spring mvc reponsebodySwagger Spring mvc 响应体
【发布时间】:2014-11-14 14:26:14
【问题描述】:

有没有办法在每个字段都有输入的情况下大摇大摆地呈现复杂对象的请求体?

简单来说,如果我的一个 api 需要一个人(假设它只有一个名字/姓氏)作为@RequestBody,那么为这个人提供大摇大摆的唯一方法就是提供整个 json 人。例如,有没有办法让每个单独的字段分别输入名字/姓氏?

【问题讨论】:

    标签: java spring-mvc swagger swagger-ui


    【解决方案1】:

    如果您使用@ModelAttribute注释您的操作,它应该完全符合您的要求

    例如而不是

    public void updatePersonName(@RequestBody Person person) { ... }
    

    使用这个

    public void updatePersonName(@ModelAttribute Person person) { ... }
    

    @ModelAttribute 将扩展原始属性并提供用于在 swagger ui 中输入名字和姓氏的字段。该操作的等价物是

    public void updatePersonName(@RequestParam String firstName, 
                                 @RequestParam String lastName) { ... }
    

    【讨论】:

    • 不幸的是,这并没有发生。我也为此提出了一个问题
    • 链接?它应该可以工作,但需要注意的是您的模型属性需要是带有 getter 和 setter 的 bean 属性
    • 如果有构造函数而不是设置器怎么办 - 类是不可变的。这应该有效吗?
    • 这确实适用于 setter/getter;但它当然打破了不变性。不确定我是否同意
    【解决方案2】:

    我还在使用带有默认 swagger UI 的 swagger,除非您更改 swagger UI 代码,否则我认为这是不可能的。但是一个非常方便的解决方案是定义参数的类型,然后提供该类型的模型。比如

     "parameters": [
                    {
                        "in": "body",
                        "name": "body",
                        "description": "A Person",
                        "required": true,
                        "type": "Person"
                    }
                ]
    

    然后

     "definitions": {
        "Person": {
          "properties": {
                "firstName": {
                    "type": "string"
                },
                "lastName": {
                    "type": "string"
                }
            }
          }
       }
    

    这样模型会出现在 UI 中,您可以轻松地将其复制到请求正文文本框并手动填充内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多