WSO2 API Manager错误响应格式定制及结构修改技术问询
解决WSO2 API Manager自定义JSON错误Payload结构的问题
嘿,我之前在配置WSO2 APIM的JWT认证API时也折腾过类似的需求,既然你已经搞定了XML转JSON的问题,那调整错误响应结构其实就是修改故障序列的事儿,下面给你一步步说怎么操作:
1. 进入目标API的运行时配置
登录WSO2 APIM管理控制台,找到你要修改的那个API(比如你的/employee/1.0.0),切换到Runtime Configurations标签,找到Fault Handling模块。
2. 编辑默认故障序列
默认的错误响应是由内置的Default Fault Sequence生成的,我们需要修改这个序列的Payload生成逻辑:
- 找到Default Fault Sequence,点击编辑按钮(如果想单独给这个API用,也可以新建一个自定义故障序列再关联)
- 在序列编辑器里,找到负责生成JSON响应的
PayloadFactory中介节点,这就是我们要改的核心部分。
3. 替换Payload模板内容
原来的默认模板是这样的:
<payloadFactory media-type="json"> <format>{"fault": {"code": $1, "message": "$2", "description": "$3"}}</format> <args> <arg evaluator="xml" expression="get-property('ERROR_CODE')"/> <arg evaluator="xml" expression="get-property('ERROR_MESSAGE')"/> <arg evaluator="xml" expression="get-property('ERROR_DESCRIPTION')"/> </args> </payloadFactory>
把它替换成你想要的结构模板:
<payloadFactory media-type="json"> <format>{"status": "fault", "description": {"code": $1, "message": "$2", "description": "$3"}}</format> <args> <arg evaluator="xml" expression="get-property('ERROR_CODE')"/> <arg evaluator="xml" expression="get-property('ERROR_MESSAGE')"/> <arg evaluator="xml" expression="get-property('ERROR_DESCRIPTION')"/> </args> </payloadFactory>
4. 保存并验证效果
- 保存修改后的序列,然后重新发布API(部分版本可能不需要重新发布,修改后直接生效)
- 现在再模拟未传Token的请求,就能得到你想要的JSON结构了:
{ "status": "fault", "description": { "code": 900901, "message": "Invalid Credentials", "description": "Access failure for API: /employee/1.0.0, version: 1.0.0 status: (900901) - Invalid Credentials. Make sure you have provided the correct security credentials" } }
额外提示
- 如果之前碰到注册表访问异常,先检查自己的账号有没有修改序列的权限,或者看看序列里是不是引用了不存在的注册表资源
- 要是想给所有API统一用这个错误结构,可以直接修改APIM安装目录下
<APIM_HOME>/repository/resources/policies/sequences/default里的_json_fault_.xml文件,改完重启服务就生效了
内容的提问来源于stack exchange,提问作者Tokyo
相关产品推荐
相关产品推荐

