Skip to content

RemoveJsonAttributesResponseBody GatewayFilter 工厂

RemoveJsonAttributesResponseBody GatewayFilter 工厂接受一组要搜索的属性名称集合。

列表中的最后一个参数可以是可选的布尔值(boolean):

  • false(默认值):仅在根级别(Root Level)删除属性。
  • true递归(Recursively)删除属性,即删除 JSON 中任何层级出现的该属性。

该过滤器提供了一种便捷的方法,通过删除指定的属性来对 JSON 响应体内容进行转换。

基本配置示例(仅根级别)

以下示例配置了一个 RemoveJsonAttributesResponseBody GatewayFilter:

application.yml

yaml
spring:
  cloud:
    gateway:
      routes:
      - id: removejsonattributes_route
        uri: https://example.org
        filters:
        - RemoveJsonAttributesResponseBody=id,color

效果: 这将从 JSON 响应体的根级别删除属性 "id" 和 "color"。如果 "id" 嵌套在子对象中,则不会被删除。

递归配置示例

以下示例配置了一个使用可选参数(设置为 true)的 RemoveJsonAttributesResponseBody GatewayFilter:

application.yml

yaml
spring:
  cloud:
    gateway:
      routes:
      - id: removejsonattributes_recursively_route
        uri: https://example.org
        predicates:
        - Path=/red/{segment}
        filters:
        - RemoveJsonAttributesResponseBody=id,color,true

效果: 这将从 JSON 响应体的任何级别(递归地)删除属性 "id" 和 "color"。无论它们藏得多深,都会被删掉。

补充教学 —— 为什么要删除 JSON 属性?

这个过滤器非常适合做轻量级的数据脱敏响应裁剪,而不需要写复杂的 Java 代码(对比 ModifyResponseBody)。

场景 1:安全与隐私(数据脱敏)

  • 后端行为:微服务返回了用户对象,其中包含了 password(加密后的哈希值)、internalId(数据库主键)、salt(盐值)等敏感或内部字段。
  • 风险:这些数据暴露给前端是不安全的。
  • 解决:配置 RemoveJsonAttributesResponseBody=password,salt,internalId,true
  • 结果:网关在把数据给前端之前,自动把这些字段“擦除”了,前端拿到的只有 usernameavatar 等安全数据。

场景 2:节省带宽(响应裁剪)

  • 后端行为:后端接口返回了一个包含 50 个字段的超级大对象,里面包含了大量的 debugInfologs 字段。
  • 前端需求:移动端 App 只需要其中的 5 个核心字段,不想下载那么多无用数据浪费流量。
  • 解决:配置过滤器删除那些体积大但无用的字段。

Based on Spring Framework.