API Gateway网关响应replaceAll函数失效问题求助
解决API Gateway自定义请求体校验错误响应的字符串替换问题
问题分析
你当前的模板写法存在Velocity语法转义错误,导致replaceAll方法未正确执行,反而输出了方法参数的字面量。
正确的模板写法
推荐使用单引号包裹正则表达式和替换值,避免双引号的转义混乱:
{ "message": "$context.error.messageString", "errors": "$context.error.validationErrorString.replaceAll('\"', '')" }
如果必须使用双引号(比如模板中有其他依赖双引号的场景),需要对正则中的双引号做双重转义:
{ "message": "$context.error.messageString", "errors": "$context.error.validationErrorString.replaceAll(\"\\\\\"\", \"\")" }
原理说明
- Velocity模板中,单引号包裹的字符串无需转义内部双引号,因此
replaceAll('\"', '')能正确识别正则为匹配双引号,替换为空字符串。 - 使用双引号时,需额外转义反斜杠:Velocity中用
\\表示实际的\,而匹配双引号的正则需要\",因此最终要写成\\\\\",才能让Java的replaceAll方法正确接收\"作为正则参数。
效果验证
修改后,当validationErrorString为([object has missing required properties (["prop1","prop2","propN"])])时,响应中的errors字段会变为:
([object has missing required properties ([prop1,prop2,propN])])
内容的提问来源于stack exchange,提问作者Ale Sanchez
相关产品推荐
相关产品推荐

