Kong Gateway:request-transformer插件能否更新JSON请求体子对象?
Kong 3.3.0 Db-Less模式下更新JSON嵌套属性的解决方案
你遇到的问题是Kong自带的请求体修改插件(比如request-transformer-advanced)在声明式YAML配置中,默认不会将点分隔的键解析为嵌套JSON路径,而是直接将带点的字符串作为键名。以下是解决办法:
1. 使用JSON Pointer语法指定嵌套路径
Kong的request-transformer-advanced插件支持通过JSON Pointer格式定位JSON嵌套属性,而非用点分隔的键名。在YAML配置中,需要将JSON修改规则写成数组形式,每个元素包含path(JSON Pointer路径)和value(要设置的值)。
示例正确配置:
services: - name: your-service url: http://backend-api routes: - name: your-route paths: ["/api"] plugins: - name: request-transformer-advanced config: json: replace: - path: "/user/profile/email" value: "$headers{X-User-Email}" - path: "/user/id" value: "$headers{X-User-ID}"
这里的path用/分隔层级,比如/user/profile/email对应JSON中的user.profile.email属性,配置生效后会生成正确的嵌套对象结构。
2. 确认使用正确的插件版本
确保你启用的是request-transformer-advanced插件,而非旧版的request-transformer。旧版插件不支持复杂的JSON嵌套操作,Kong 3.3.0默认已包含request-transformer-advanced,直接使用即可。
3. 检查YAML缩进格式
声明式配置对缩进高度敏感,数组元素(比如replace下的每条规则)需要保持正确缩进,否则Kong会解析错误导致配置不生效。
关于自定义插件
如果上述官方插件的功能无法满足你的复杂需求,再考虑编写自定义插件。优先利用原生功能可以减少后续维护成本,避免重复造轮子。
内容的提问来源于stack exchange,提问作者Steve Davis
相关产品推荐
相关产品推荐

