当使用无效访问令牌调用已发布的API时,获得了XML响应。 900901 无效证件 API访问失败:/sit/zxq/oapi/ut/1.0,版本:1.0,密钥:b645348f2ca7fea5a9cf498e4085a471。确保您已经提供了正确的访问令牌
我们如何根据以下JSON格式自定义此类响应? { “req_id”:“REQ_ENT_1356985018299_9678”, “err_resp”:{ “code”:“28001”, “msg”:“无效的访问令牌” } }
感谢并期待您的专业知识。
答案 0 :(得分:0)
我们最近在API Manager实施方面做了类似的事情。您可以在/ repository / deployment / server / synapise-configs / default / sequences中找到故障序列,匹配错误代码,并提供您自己的JSON内容。您还可以使用switch中介(故障序列只是中介序列)来为各种Accept头值返回正确的内容类型。只需将fault.xml文件中写入的有效负载替换为等效的JSON内容(或按照建议,编写一个开关以支持这两种内容类型)。
答案 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_"/>
对于您的情况,Invalid Credential具有900901代码,因此它将匹配并需要定义invalidCredential.xml,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse" name="invalidCredential">
<payloadFactory media-type="json">
<format>{ "req_id": "REQ_ENT_1356985018299_9678", "err_resp": { "code": "28001", "msg": "Invalid access token" } </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>