当前位置: 首页 > 知识库问答 >
问题:

如何配置Swashuckle忽略模型上的属性

钮长恨
2023-03-14

我正在使用Swashback为webapi2项目生成swagger documentation\UI。我们的模型与一些遗留接口共享,因此我想忽略模型上的几个属性。我不能使用JsonIgnore属性,因为遗留接口还需要序列化为JSON,所以我不想全局忽略属性,只是在Swashback配置中。

我在这里找到了这样做的方法

https://github.com/domaindrivendev/Swashbuckle/issues/73

但这似乎已经过时,与目前的虚张声势释放。

为旧版本的Swashuckle推荐的方法是使用IModelFilter实现,如下所示:

public class OmitIgnoredProperties : IModelFilter
{
    public void Apply(DataType model, DataTypeRegistry dataTypeRegistry, Type type)
    {
        var ignoredProperties = … // use reflection to find any properties on 
                                  // type decorated with the ignore attributes

        foreach (var prop in ignoredProperties) 
            model.Properties.Remove(prop.Name);

    }
}

SwaggerSpecConfig.Customize(c => c.ModelFilter<OmitIgnoredProperties>());

但我不确定如何配置Swashback以在当前版本中使用IModelFilter?我用的是Swashback 5.5.3。

共有3个答案

融泓
2023-03-14

解决方案。NET Core 3.1和。净标准2.1:

使用系统中的JsonIgnore。文本Json。序列化命名空间。

Newtonsoft.Json中的JsonIgnore将不起作用)

public class Test
{
    [System.Text.Json.Serialization.JsonIgnore]
    public int HiddenProperty { get; set; }
    public int VisibleProperty { get; set; }
}
曾嘉祯
2023-03-14

如果您将字段/属性标记为内部的protected的私有的,它将被swagger留档中的swashbnle自动忽略。更新:显然,这些属性/字段不会在请求/响应中填充。

景稳
2023-03-14

如果需要这样做,但不使用JsonIgnore(可能仍然需要序列化/反序列化属性),那么只需创建一个自定义属性。

[AttributeUsage(AttributeTargets.Property)]
public class SwaggerExcludeAttribute : Attribute
{
}

然后是一个类似于Johng的模式过滤器

public class SwaggerExcludeFilter : ISchemaFilter
{
    #region ISchemaFilter Members

    public void Apply(Schema schema, SchemaRegistry schemaRegistry, Type type)
    {
        if (schema?.properties == null || type == null)
            return;

        var excludedProperties = type.GetProperties()
                                     .Where(t => 
                                            t.GetCustomAttribute<SwaggerExcludeAttribute>() 
                                            != null);

        foreach (var excludedProperty in excludedProperties)
        {
            if (schema.properties.ContainsKey(excludedProperty.Name))
                schema.properties.Remove(excludedProperty.Name);
        }
    }

    #endregion
}

别忘了注册过滤器

c.SchemaFilter<SwaggerExcludeFilter>();
 类似资料:
  • 我试图只返回有值的属性,但也会返回空值。 我知道有一个注解可以做到这一点(),但是我需要在每个实体类中使用这些。 所以,我的问题是:有没有办法通过spring配置全局配置?(最好避免使用XML) 编辑:似乎这个问题已经被认为是重复的,但我不这么认为。这里真正的问题是如何通过Spring config配置它,这是我在其他问题中找不到的。

  • 我有一个实体具有多个关联。我正在使用spring-boot公开一个REST API。目前,我有多个REST API,它们返回整个实体的JSON响应,包括关联。 但我不想序列化所有REST API中的所有关联对象。 例如: API-1应返回parent+associationA对象 API-2应返回parent+associationA+associationB对象 API-3应返回parent+a

  • 我有一个基于Micronaut的网络应用程序,我在认证方面遇到了一些问题。这个问题特别与浏览器正在经历的变化有关,其中SameSite默认为Lax,如果您使用SameSite:none,那么cookie必须是安全的。我正在使用所有最新的稳定版本,例如Micronaut2.0.1。 Chrome给了我以下例外: set-cookie:JWT=EYJHBGCIOIJUB2..U5ODYXNZA2MX0

  • 问题内容: ackson具有使用以下命令忽略类中未知属性的注释: 它允许你使用以下注释忽略特定属性: 如果要全局设置,可以修改对象映射器: 你如何使用spring对其进行全局设置,以便在服务器启动时无需编写其他类? 问题答案: 对于杰克逊1.9x或更低版本,你可以使用对象映射器提供程序忽略未知属性 For jackson 1.9x及更高版本,你可以使用对象映射器提供程序忽略未知属性 Spring不

  • 我正在尝试调试我编写的需要命令行参数的python3脚本,但没有成功。我找到了VSCode:如何在搜索stackoverflow时调试带参数的Python脚本,它指出属性args应该设置为参数列表。然而,当我运行我创建的调试配置以调试./scripts下的脚本时,我会返回argparse错误<code>,需要以下参数:database、media_url、images 关于用vscode调试pyt

  • 问题内容: IE浏览器忽略缩放设置不起作用,我的代码如下,为什么它不起作用?我收到了错误消息(selenium.common.exceptions.SessionNotCreatedException:消息:启动Internet Explorer时发生意外错误。浏览器缩放级别设置为125%。应将其设置为100%) 问题答案: 不 ,在使用 InternetExplorerDriver时, 您不应忽