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。 - 结果:网关在把数据给前端之前,自动把这些字段“擦除”了,前端拿到的只有
username、avatar等安全数据。
场景 2:节省带宽(响应裁剪)
- 后端行为:后端接口返回了一个包含 50 个字段的超级大对象,里面包含了大量的
debugInfo或logs字段。 - 前端需求:移动端 App 只需要其中的 5 个核心字段,不想下载那么多无用数据浪费流量。
- 解决:配置过滤器删除那些体积大但无用的字段。