18

我花了很多时间试图找到在 Node.JS 中创建 swagger 文档的解决方案。主库是 swagger-node,您可以在其中创建一个 swagger yaml 文件,然后将控制器添加到其中。它会自动在您的应用程序中提供 swagger ui 文档,并针对您在 yaml 中指定的模型对请求和响应进行验证。

这很简洁,但是我有一个要求,我希望明确地能够返回或接受一些字段null作为值,例如:

{ 
  id: 123,
  description: "string",
  date_sent: null
}

我不想删除date_sent密钥,我想明确地将其声明为空。

我相信,swagger 规范不支持anyOfJSON 模式通常如何做到这一点。

我想知道是否有解决方法?也许某些可用于节点的库具有x-nullable可以添加的供应商特定标志,或者以某种方式指定我的非必填字段都应该为空。

我是否必须自己编写一些东西来获取我的 swagger 文件,然后在验证器中间件运行之前对其进行修改,还是有人可以建议一些解决方法?

4

4 回答 4

20

nullableOpenAPI (fka Swagger) Specification v3.0.0中支持字段,但在 v2.0 中不支持。可空类型定义如下:

# Can be string or null
type: string
nullable: true
于 2017-03-14T21:59:07.677 回答
15

SwaggerUI 不支持可为空的类型(请参阅此处)。但我使用可为空的属性作为:

type: ['string','null']

之后,此属性从 UI 中消失,但验证仍然有效。

于 2016-07-01T08:27:35.553 回答
5

您可以使用默认属性代替在类型属性中添加 null 。

Swagger.json 属性定义示例:

"due_date": {
  "type": "string",
  "description": "Due date",
  "default": "null"
},

这是一个有效的 Swagger 类型定义,并且仍按预期显示在 Swagger UI 中。

于 2017-12-07T05:59:38.773 回答
2

只是作为一个提示,因为我偶然发现了这个:当我添加

type: string
nullable: true`

如答案https://stackoverflow.com/a/42797352/2750563中所述,我的服务仅返回"fieldName": { "present": true }而不是实际值!

如果您看到这一点,只需将 添加JsonNullableModule到您的 Jackson 序列化程序中,例如,如果使用 Spring:

@Component
public class JacksonConfiguration {

    @Autowired
    public void configureJackson(ObjectMapper mapper) {
        mapper.registerModule(new JsonNullableModule());
    }

}

然后一切看起来又好了。

于 2019-11-26T09:10:53.270 回答