我想自定义api manager发送的错误消息,例如当访问令牌丢失或过期时。我已经按照here的描述配置了_auth_failure_handler_来返回json中的消息,并获得如下响应:
{"fault":{"code":"900902","message":"Missing Credentials","description":"Required OAuth credentials not provided"}}
我想修改消息描述并完全删除“代码”。有没有办法做到这一点?我试过调整序列没有运气。
答案 0 :(得分:0)
修改错误代码不是明智的建议。然而,是的,可以修改有效载荷。使用filter mediator和Json path标识数据并使用enrich mediator根据需要修改有效负载。
答案 1 :(得分:0)
您需要定位https://docs.wso2.com/display/AM260/Error+Handling中的错误代码,并将其更新为自定义JSON消息。对于与身份验证令牌相关的错误,请尝试按以下方法修改_auth_failure_handler _:
<sequence name="_auth_failure_handler_" xmlns="http://ws.apache.org/ns/synapse">
<property name="error_message_type" value="application/json"/>
<filter source="get-property('ERROR_CODE')" regex="405">
<then>
<sequence key="converter"/>
<drop/>
</then>
<else>
</else>
</filter>
<filter source="get-property('ERROR_CODE')" regex="900901">
<then>
<sequence key="invalidCredential"/>
<drop/>
</then>
<else>
</else>
</filter>
<filter source="get-property('ERROR_CODE')" regex="900902">
<then>
<sequence key="missingCredential"/>
<drop/>
</then>
<else>
</else>
</filter>
<sequence key="_cors_request_handler_"/>
对于您的情况,Missing Credential具有900902代码,因此它将匹配,并且需要按以下方式定义missingCredential.xml:
<?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse" name="missingCredential">
<payloadFactory media-type="json">
<format>{ "status": "Error","message": "Missing Credentials" }</format>
<!--Add your custom message and format here. This will be your output-->
</payloadFactory>
<property name="RESPONSE" value="true"/>
<header name="To" action="remove"/>
<property name="HTTP_SC" value="401" scope="axis2"/>
<property name="messageType" value="application/json" scope="axis2"/>
<send/>
</sequence>