इसलिए मुझे लगता है कि मुझे भी इसी तरह की समस्या है। मैं int -> स्ट्रिंग मैपिंग के साथ-साथ एनम उत्पन्न करने के लिए स्वैगर की तलाश कर रहा हूं। एपीआई को इंट को स्वीकार करना चाहिए। स्वैगर-उई कम मायने रखता है, जो मैं वास्तव में चाहता हूं वह दूसरी तरफ "वास्तविक" एनम के साथ कोड पीढ़ी है (इस मामले में रेट्रोफिट का उपयोग करके एंड्रॉइड ऐप)।
इसलिए मेरे शोध से यह अंततः ओपनएपीआई विनिर्देश की एक सीमा लगती है जिसका उपयोग स्वैगर करता है। एनम के लिए नाम और संख्या निर्दिष्ट करना संभव नहीं है।
मेरे द्वारा अनुसरण किया गया सबसे अच्छा मुद्दा https://github.com/OAI/OpenAPI-Specification/issues/681 है जो "शायद जल्द ही" जैसा दिखता है, लेकिन तब स्वैगर को अपडेट करना होगा, और मेरे मामले में Swashbatle के रूप में कुंआ।
अभी के लिए मेरा वर्कअम एक डॉक्यूमेंट फ़िल्टर लागू करना है जो एनम के लिए दिखता है और एन्नम की सामग्री के साथ प्रासंगिक विवरण को पॉप्युलेट करता है।
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.DocumentFilter<SwaggerAddEnumDescriptions>();
//disable this
//c.DescribeAllEnumsAsStrings()
SwaggerAddEnumDescriptions.cs:
using System;
using System.Web.Http.Description;
using Swashbuckle.Swagger;
using System.Collections.Generic;
public class SwaggerAddEnumDescriptions : IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
{
// add enum descriptions to result models
foreach (KeyValuePair<string, Schema> schemaDictionaryItem in swaggerDoc.definitions)
{
Schema schema = schemaDictionaryItem.Value;
foreach (KeyValuePair<string, Schema> propertyDictionaryItem in schema.properties)
{
Schema property = propertyDictionaryItem.Value;
IList<object> propertyEnums = property.@enum;
if (propertyEnums != null && propertyEnums.Count > 0)
{
property.description += DescribeEnum(propertyEnums);
}
}
}
// add enum descriptions to input parameters
if (swaggerDoc.paths.Count > 0)
{
foreach (PathItem pathItem in swaggerDoc.paths.Values)
{
DescribeEnumParameters(pathItem.parameters);
// head, patch, options, delete left out
List<Operation> possibleParameterisedOperations = new List<Operation> { pathItem.get, pathItem.post, pathItem.put };
possibleParameterisedOperations.FindAll(x => x != null).ForEach(x => DescribeEnumParameters(x.parameters));
}
}
}
private void DescribeEnumParameters(IList<Parameter> parameters)
{
if (parameters != null)
{
foreach (Parameter param in parameters)
{
IList<object> paramEnums = param.@enum;
if (paramEnums != null && paramEnums.Count > 0)
{
param.description += DescribeEnum(paramEnums);
}
}
}
}
private string DescribeEnum(IList<object> enums)
{
List<string> enumDescriptions = new List<string>();
foreach (object enumOption in enums)
{
enumDescriptions.Add(string.Format("{0} = {1}", (int)enumOption, Enum.GetName(enumOption.GetType(), enumOption)));
}
return string.Join(", ", enumDescriptions.ToArray());
}
}
इसका परिणाम आपके स्वैगर-उई पर निम्न की तरह होता है ताकि आप कम से कम "यह देख सकें कि आप क्या कर रहे हैं":