URL 参数 wso2esb
URL parameter wso2esb
我在 esb 中创建了一个 API,就像这个片段:
<api xmlns="http://ws.apache.org/ns/synapse" name="contact_v1"
<resource methods="GET" uri-template="/contact-by-email?email={query.param.email}" inSequence="crm_contact-by-email_v1" outSequence="crm_contact-by-email_v1" faultSequence="crm_contact-by-email-error_v1"/>
</api>
在我的序列中,我检索了请求参数、电子邮件等
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="crm_contact-by-email_v1" xmlns="http://ws.apache.org/ns/synapse">
<in>
<script language="js"><![CDATA[try {
var randomnumber1=Math.floor((Math.random() * 10000) + 1);
mc.setProperty("sessionnumber", randomnumber1.toString());
} catch(e) {
}]]></script>
<property expression="$axis2:REST_URL_POSTFIX" name="myURL"
scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
<script language="js"><![CDATA[try {
var log = mc.getServiceLog();
var email = mc.getProperty('query.param.email');
log.info("emailxxxxxx "+email);
} catch(e) {}]]></script>
</in>
<out>
<send/>
<drop/>
</out>
</sequence>
当我使用这样的编码电子邮件发出请求时
test%40test.com
它没有问题。
但是当我用
发出请求时
test@test.com
它显示这个错误
<tp:fault xmlns:tp="https://xxxxxxx.com/"><tp:code>404</tp:code><tp:type>Status report</tp:type><tp:message>Not Found</tp:message><tp:description>The requested resource (//contact-by-email?email=test@test.com) is not available.</tp:description></tp:fault>
你有什么想法吗
此致
像@这样的字符是URI-Templates的RFC规范中分隔符的保留字符(如果你有兴趣我可以解释更多)。因此,为了允许 @ 作为电子邮件参数的值,请使用 {+query.param.email} 定义 uri 模板,如下所示。
<api xmlns="http://ws.apache.org/ns/synapse" name="contact_v1"
<resource methods="GET" uri-template="/contact-by-email?email={+query.param.email}" inSequence="crm_contact-by-email_v1" outSequence="crm_contact-by-email_v1" faultSequence="crm_contact-by-email-error_v1"/>
</api>
我在 esb 中创建了一个 API,就像这个片段:
<api xmlns="http://ws.apache.org/ns/synapse" name="contact_v1"
<resource methods="GET" uri-template="/contact-by-email?email={query.param.email}" inSequence="crm_contact-by-email_v1" outSequence="crm_contact-by-email_v1" faultSequence="crm_contact-by-email-error_v1"/>
</api>
在我的序列中,我检索了请求参数、电子邮件等
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="crm_contact-by-email_v1" xmlns="http://ws.apache.org/ns/synapse">
<in>
<script language="js"><![CDATA[try {
var randomnumber1=Math.floor((Math.random() * 10000) + 1);
mc.setProperty("sessionnumber", randomnumber1.toString());
} catch(e) {
}]]></script>
<property expression="$axis2:REST_URL_POSTFIX" name="myURL"
scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
<script language="js"><![CDATA[try {
var log = mc.getServiceLog();
var email = mc.getProperty('query.param.email');
log.info("emailxxxxxx "+email);
} catch(e) {}]]></script>
</in>
<out>
<send/>
<drop/>
</out>
</sequence>
当我使用这样的编码电子邮件发出请求时
test%40test.com
它没有问题。
但是当我用
发出请求时test@test.com
它显示这个错误
<tp:fault xmlns:tp="https://xxxxxxx.com/"><tp:code>404</tp:code><tp:type>Status report</tp:type><tp:message>Not Found</tp:message><tp:description>The requested resource (//contact-by-email?email=test@test.com) is not available.</tp:description></tp:fault>
你有什么想法吗
此致
像@这样的字符是URI-Templates的RFC规范中分隔符的保留字符(如果你有兴趣我可以解释更多)。因此,为了允许 @ 作为电子邮件参数的值,请使用 {+query.param.email} 定义 uri 模板,如下所示。
<api xmlns="http://ws.apache.org/ns/synapse" name="contact_v1"
<resource methods="GET" uri-template="/contact-by-email?email={+query.param.email}" inSequence="crm_contact-by-email_v1" outSequence="crm_contact-by-email_v1" faultSequence="crm_contact-by-email-error_v1"/>
</api>