node.js

时间:2016-07-01 07:36:09

标签: node.js swagger swagger-ui swagger-editor

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

这很简洁,但是我要求某些字段我想明确地返回或接受null作为值,例如:

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

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

swagger规范不支持anyOf这就是JSON模式通常如何做到这一点我相信。

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

我是否必须自己写一些带有我的swagger文件然后在验证器中间件运行之前修改它的东西,或者是否有某些可以建议的解决方法?

4 个答案:

答案 0 :(得分:13)

OpenAPI(fka Swagger)规范v3.0.0支持

nullable字段,但不支持v2.0。可空类型定义如下:

# Can be string or null
type: string
nullable: true

答案 1 :(得分:11)

SwaggerUI不支持可空类型(请参阅here)。但是我使用了可以为空的属性:

type: ['string','null']

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

答案 2 :(得分:4)

您可以使用默认属性而不是在type属性中添加null。

Swagger.json属性定义示例:

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

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

答案 3 :(得分:0)

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

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());
    }

}

然后一切看起来都很好。