使用oneOf和$ ref为Swagger合约定义JSONschem

时间:2017-11-22 19:10:51

标签: swagger swagger-ui jsonschema

我正在写一个昂首阔步的合同,但我的数据模型是用JSONSchemas定义的。

创建我的模型后,我在swagger UI中测试它们。现在我有问题使用'oneOf'作为参考。如下......

...
 "socio":{
            "type":{
                "oneOf":[
                    {
                        "properties":{
                               "pessoaFisica":{
                                //"pessoaFisica": "object",
                                "$ref":"http://soa-mds/XXXXXX/apps/SOA/JSONSchemas/Corporativo/pessoaFisica.json"
                            },
                            "pessoaJuridica":{   
                                  //"pessoaJuridica": "object",
                                "$ref":"http://soa-mds/dataprev.gov.br/apps/SOA/JSONSchemas/Corporativo/pessoaJuridica.json"
                            },
                            "estrangeiro":{
                                //"estrangeiro": "object",
                                "$ref":"http://soa-mds/XXXXXX/apps/SOA/JSONSchemas/Corporativo/estrangeiro.json"
                            }
                        }
                    }         
                ]   
            }
        }         
    },
....

经过研究后,我找不到使用$ ref的正确方法。

任何人都可以帮助我吗?

谢谢, MMR Swagger UI result A

1 个答案:

答案 0 :(得分:2)

oneOf的正确语法是:

"socio": {
    "oneOf": [
      {
        "$ref": "http://soa-mds/XXXXXX/apps/SOA/JSONSchemas/Corporativo/pessoaFisica.json"
      },
      {
        "$ref": "http://soa-mds/dataprev.gov.br/apps/SOA/JSONSchemas/Corporativo/pessoaJuridica.json"
      },
      {
        "$ref": "http://soa-mds/XXXXXX/apps/SOA/JSONSchemas/Corporativo/estrangeiro.json"
      }
    ]
  }

确保您的规范使用"openapi": "3.0.0"而不是"swagger": "2.0"(仅{+ 1}}在OpenAPI 3.0中支持。)

所有引用的模式必须与OpenAPI Schema object兼容。虽然OpenAPI模式对象基于JSON模式,OpenAPI中的一些JSON模式关键字work differently和一些关键字(例如oneOfid)根本不受支持。