我正在使用Swashback生成Swagger输出。在我的模型I上,具有以下属性:
public FieldValue? MyProperty { get; set; }
FieldValue是一个简单的类,可以保存ID和名称:
public class FieldValue
{
/// <summary>
/// The numerical represenation of the value.
/// </summary>
/// <example>1</example>
public string Id { get; set; }
/// <summary>
/// The textual represenation of the value.
/// </summary>
/// <example>SomeValue</example>
public string Name { get; set; }
}
通过代码中的一些业务逻辑,一组可能的键值对(ID和名称)映射到此属性。
现在,我想在我的Swagger输出中的enum标签中显示所有可能的值。使用ISchemaFilter的一个实现,即MyProperty属性上的一个自定义属性,并使用allOf而不是简单的ref,我成功地在我的JSON输出中添加了值,见下文。使用allOf而不仅仅是ref的原因是ref将覆盖引用架构上的所有属性。因此,当我使用allOf时,它将我的描述和枚举字段保留在文档中。
{
"components": {
"schemas": {
"FieldValue": {
"type": "object",
"properties": {
"Id": {
"type": "string",
"description": "The numerical represenation of the value.",
"nullable": true,
},
"Name": {
"type": "string",
"description": "The textual represenation of the value.",
"nullable": true,
}
}
},
"MyProperty": {
"enum": [
"1: EnumValue1",
"2: EnumValue2",
"3: EnumValue3"
],
"allOf": [{
"$ref": "#/components/schemas/FieldValue"
}
],
"description": "Some description",
"nullable": true
}
}
}
不过,这不会在Swagger UI中显示枚举值。它会显示描述。
这个Swagger文档有效吗?如果不是,如何使其有效并显示MyProperty
的枚举?
用例的正确表示形式是:
"MyProperty": {
"enum": [
{"Id": "1", "Name": "EnumValue1"},
{"Id": "2", "Name": "EnumValue2"},
{"Id": "3", "Name": "EnumValue3"}
],
"allOf": [
{ "$ref": "#/components/schemas/FieldValue" }
],
"description": "Some description",
"nullable": true
}
然而,对于包含对象文字的枚举,几乎没有工具支持。我建议在MyProperty属性的描述中提及可能的Id和Name值。
更新: ====================================================== 在我的团队的项目中,我们有一个带有java.time.temporal.ChronOunit字段的实体。在类中,是这样定义的: 此枚举类型具有索引(NANOS、秒、小时等),以及与这些索引关联的键值对,如 这并不重要,除非自动化测试工具会发现这些名称,并在请求中发送一个名称,然后请
例如: Swagger这样显示枚举: 我想要的是: API返回“显示名称”,然而,Swagger显示“枚举名称”,这经常导致混淆。有可能改变狂妄的价值观吗?
我正在使用从以下依赖项导入的Swagger/OpenAPIV3注释创建应用程序的API描述: 其中一个批注是批注,它接受名为的属性,该属性允许字符串数组: 现在,我想使用在枚举类上构造的自定义方法,该方法返回允许的字符串数组,因此不需要在每次向枚举添加类型时添加该方法。以便我们可以这样使用它: 现在这是无法编译的,因为在执行注释时不知道该方法。是否有这样的解决方案允许在SwaggerV3注释属性值
在尝试获取allowableValues标记的枚举值时,我遇到了以下错误。 批注属性apimodelProperty.AllowAbleValues的值必须是常量表达式 我想做的是: 我有可能做我想做的事吗?我知道在我的API中只公开枚举是可能的,然后swagger会自动识别允许的值,但是需要将有问题的字段公开为字符串,即使我们的内部逻辑将其作为枚举。 提前感谢您的帮助!
无法获取如何将字符串类型的引用与数组参数中的枚举值一起使用。我可以在items键中进行引用,并且它正在工作,但Swagger产生错误:不是有效的参数定义 Web UI生成界面,但它有文本区,而不是我期望的多选框。 正确的做法是什么? 我的代码: