首先,以下存储库包含用于重现此问题的所有代码(以及说明):https://github.com/elgleidson/swagger-problem
我有以下JSON:
{
"nonNullableField": "not null",
"nullableField": null,
"nonNullableObjectField": {
"someField": "some value"
},
"nullableObjectField": null,
"nonNullableList": [
"not null"
],
"nullableList": null,
"nonNullableObjectList": [
{
"someField": "some value"
}
],
"nullableObjectList": null
}
哪些映射到以下Java类:
@Value
public class MyResponse {
@Schema(nullable = false, description = "DO NOT map to json object and DO NOT allow null")
private final String nonNullableField = "not null";
@Schema(nullable = true, description = "DO NOT map to json object and allows null")
private final String nullableField = null;
@Schema(nullable = false, description = "map to json object and DOES NOT allow null")
private final MyClass nonNullableObjectField = new MyClass(nonNullableField);
@Schema(nullable = true, description = "map to json object and allows null")
private final MyClass nullableObjectField = null;
@ArraySchema(arraySchema = @Schema(nullable = false, description = "list that DOES NOT map to json object and DOES NOT allow null"))
private final List<String> nonNullableList = List.of(nonNullableField);
@ArraySchema(arraySchema = @Schema(nullable = true, description = "list that DOES NOT map to json object and allow null"))
private final List<String> nullableList = null;
@ArraySchema(arraySchema = @Schema(nullable = false, description = "list that map to json object and DOES NOT allow null"))
private final List<MyClass> nonNullableObjectList = List.of(nonNullableObjectField);
@ArraySchema(arraySchema = @Schema(nullable = true, description = "list that map to json object and allow null"))
private final List<MyClass> nullableObjectList = null;
}
@Value
@Schema(description = "my class description")
public class MyClass {
@Schema(description = "my class field description")
private final String someField;
}
当我转到/v3/api-docs
(或/swagger-ui.html
)时,将生成以下文档:
{
"MainResponse": {
"type": "object",
"properties": {
"nonNullableField": {
"type": "string",
"description": "DO NOT map to json object and DO NOT allow null"
},
"nullableField": {
"type": "string",
"description": "DO NOT map to json object and allows null",
"nullable": true
},
"nonNullableObjectField": {
"$ref": "#/components/schemas/MyClass"
},
"nullableObjectField": {
"$ref": "#/components/schemas/MyClass"
},
"nonNullableList": {
"type": "array",
"description": "list that DOES NOT map to json object and DOES NOT allow null",
"items": {
"type": "string"
}
},
"nullableList": {
"type": "array",
"description": "list that DOES NOT map to json object and allow null",
"nullable": true,
"items": {
"type": "string"
}
},
"nonNullableObjectList": {
"type": "array",
"description": "list that map to json object and DOES NOT allow null",
"items": {
"$ref": "#/components/schemas/MyClass"
}
},
"nullableObjectList": {
"type": "array",
"description": "list that map to json object and allow null",
"nullable": true,
"items": {
"$ref": "#/components/schemas/MyClass"
}
}
}
},
"MyClass": {
"type": "object",
"properties": {
"someField": {
"type": "string",
"description": "my class field description"
}
},
"description": "my class description",
"nullable": true
}
}
如您所见,对于类型未映射到object
的字段,将按预期生成文档。对于nullableObjectField
不会发生同样的事情:nullable
属性放在MyClass
定义中而不是字段中。
我想改为生成以下文档:
{
"MainResponse": {
"type": "object",
"properties": {
"nonNullableField": {
"type": "string",
"description": "DO NOT map to json object and DO NOT allow null"
},
"nullableField": {
"type": "string",
"description": "DO NOT map to json object and allows null",
"nullable": true
},
"nonNullableObjectField": {
"$ref": "#/components/schemas/MyClass",
"description": "map to json object and DOES NOT allow null"
},
"nullableObjectField": {
"$ref": "#/components/schemas/MyClass",
"description": "map to json object and allows null",
"nullable": true
},
"nonNullableList": {
"type": "array",
"description": "list that DOES NOT map to json object and DOES NOT allow null",
"items": {
"type": "string"
}
},
"nullableList": {
"type": "array",
"description": "list that DOES NOT map to json object and allow null",
"nullable": true,
"items": {
"type": "string"
}
},
"nonNullableObjectList": {
"type": "array",
"description": "list that map to json object and DOES NOT allow null",
"items": {
"$ref": "#/components/schemas/MyClass"
}
},
"nullableObjectList": {
"type": "array",
"description": "list that map to json object and allow null",
"nullable": true,
"items": {
"$ref": "#/components/schemas/MyClass"
}
}
}
},
"MyClass": {
"type": "object",
"properties": {
"someField": {
"type": "string",
"description": "my class field description"
}
},
"description": "my class description"
}
}
我该怎么做?可能吗?