如何在Swagger UI中修改decimal类型的示例值为0,00?
解决Swashbuckle.AspNetCore v6.1.4中Decimal类型示例值改为0,00的问题
你之前的代码仅设置了MultipleOf,这并非修改示例值的正确方式。要修改Swagger UI里的Decimal类型示例值,需直接为OpenApiSchema的Example属性赋值,同时配合格式设置确保显示为两位小数格式。以下是可行方案:
方案1:自定义SchemaFilter全局处理Decimal类型
创建一个SchemaFilter,针对模型中的Decimal类型字段/属性,直接指定示例值并配置格式约束:
public class DecimalExampleSchemaFilter : ISchemaFilter { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { // 处理模型属性(大多数场景下模型用属性定义) var decimalProps = context.Type.GetProperties() .Where(p => p.PropertyType == typeof(decimal) || p.PropertyType == typeof(decimal?)); foreach (var prop in decimalProps) { if (schema.Properties.TryGetValue(prop.Name, out var propSchema)) { // 强制设置示例值为0,00 propSchema.Example = new OpenApiString("0,00"); // 指定格式为decimal,让Swagger UI识别为小数类型 propSchema.Format = "decimal"; // 设置步长为0.01,确保输入符合两位小数要求 propSchema.MultipleOf = new OpenApiDecimal(0.01M); } } // 处理模型字段(如果你的模型用字段定义) var decimalFields = context.Type.GetFields() .Where(f => f.FieldType == typeof(decimal) || f.FieldType == typeof(decimal?)); foreach (var field in decimalFields) { if (schema.Properties.TryGetValue(field.Name, out var fieldSchema)) { fieldSchema.Example = new OpenApiString("0,00"); fieldSchema.Format = "decimal"; fieldSchema.MultipleOf = new OpenApiDecimal(0.01M); } } } }
随后在项目配置中注册这个过滤器:
services.AddSwaggerGen(c => { // 其他Swagger配置... c.SchemaFilter<DecimalExampleSchemaFilter>(); });
方案2:针对单个属性设置示例值
如果仅需修改特定属性的示例值,可以使用Swashbuckle.AspNetCore.Filters包中的特性(注意安装与v6.1.4兼容的版本):
using Swashbuckle.AspNetCore.Filters; public class YourModel { [SwaggerExample("0,00")] public decimal Amount { get; set; } }
然后在配置中启用示例过滤器:
services.AddSwaggerGen(c => { // 其他Swagger配置... c.ExampleFilters(); });
注意事项
- 直接设置字符串类型的示例值
"0,00"可以强制Swagger UI显示为逗号分隔的两位小数,不受浏览器区域设置影响。 MultipleOf = 0.01M的设置会约束输入框的步长,引导用户输入符合两位小数规则的数值。
内容的提问来源于stack exchange,提问作者Russo
相关产品推荐
相关产品推荐

