修改服务器响应负载 JSON
Modifying Server Response Payload JSON
我正在修改服务器发送的响应。为此,我设置了一个测试 API,旨在以如下格式发回 IP:
{
"origin": "202.37.75.130"
}
我未修改的代码给了我想要的东西。
我想做的测试是将 "origin" 的名称更改为 "IP Address",希望得到这样的响应:
{
"IP Address": "202.37.75.130"
}
为此,我修改了代码的 outSequence 部分,现在是这样(我添加的只是 PayloadFactoryMediator 部分,过滤器之前就在那里):
<outSequence>
<payloadFactory media-type="json">
<format>{
"IP Address" : {
""
}
}
</format>
<args>
<arg evaluator="json" expression="$.origin"/>
</args>
</payloadFactory>
<filter source="get-property('CORS_ORIGIN')" regex=".+">
<then>
<property name="Access-Control-Allow-Origin" expression="get-property('CORS_ORIGIN')" scope="transport"/>
<property name="Access-Control-Expose-Headers" value="Assertion,X-Jwt-Assertion,X-User-Name,X-User-Domain" scope="transport"/>
</then>
</filter>
<send/>
</outSequence>
但是,当我像以前一样卷曲到 API 时,我得到了回复:
curl: (52) 来自服务器的空回复
谁能告诉我我做错了什么?
我通过为“http://ip.jsontest.com/”处可用的 json 服务创建代理服务来尝试您的场景,并得到了预期的结果。但我使用了与您相同的 "payloadFactory" 配置。在下面检查我的完整配置。
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="ipservice"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<outSequence>
<payloadFactory media-type="json">
<format>{
"IP Address" : {
""
}
}
</format>
<args>
<arg evaluator="json" expression="$.ip"/>
</args>
</payloadFactory>
<send/>
</outSequence>
<endpoint>
<address uri="http://ip.jsontest.com/"/>
</endpoint>
</target>
<description/>
</proxy>
我也尝试过使用过滤器标签进行上述配置。它工作正常。所以上面的配置没有错误。请检查您的 JSON 服务和其他配置。
我使用以下命令调用了该服务。
curl -v -X GET "http://localhost:8280/services/ipservice"
我正在修改服务器发送的响应。为此,我设置了一个测试 API,旨在以如下格式发回 IP:
{
"origin": "202.37.75.130"
}
我未修改的代码给了我想要的东西。
我想做的测试是将 "origin" 的名称更改为 "IP Address",希望得到这样的响应:
{
"IP Address": "202.37.75.130"
}
为此,我修改了代码的 outSequence 部分,现在是这样(我添加的只是 PayloadFactoryMediator 部分,过滤器之前就在那里):
<outSequence>
<payloadFactory media-type="json">
<format>{
"IP Address" : {
""
}
}
</format>
<args>
<arg evaluator="json" expression="$.origin"/>
</args>
</payloadFactory>
<filter source="get-property('CORS_ORIGIN')" regex=".+">
<then>
<property name="Access-Control-Allow-Origin" expression="get-property('CORS_ORIGIN')" scope="transport"/>
<property name="Access-Control-Expose-Headers" value="Assertion,X-Jwt-Assertion,X-User-Name,X-User-Domain" scope="transport"/>
</then>
</filter>
<send/>
</outSequence>
但是,当我像以前一样卷曲到 API 时,我得到了回复:
curl: (52) 来自服务器的空回复
谁能告诉我我做错了什么?
我通过为“http://ip.jsontest.com/”处可用的 json 服务创建代理服务来尝试您的场景,并得到了预期的结果。但我使用了与您相同的 "payloadFactory" 配置。在下面检查我的完整配置。
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="ipservice"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<outSequence>
<payloadFactory media-type="json">
<format>{
"IP Address" : {
""
}
}
</format>
<args>
<arg evaluator="json" expression="$.ip"/>
</args>
</payloadFactory>
<send/>
</outSequence>
<endpoint>
<address uri="http://ip.jsontest.com/"/>
</endpoint>
</target>
<description/>
</proxy>
我也尝试过使用过滤器标签进行上述配置。它工作正常。所以上面的配置没有错误。请检查您的 JSON 服务和其他配置。
我使用以下命令调用了该服务。
curl -v -X GET "http://localhost:8280/services/ipservice"