我正在尝试将请求转换为以下调用,请执行Spring Integration异步调用
function sendToSomething(){
var formattedDate = $.datepicker.formatDate('yy-mm-dd', new Date());
var emailAddress = $("#prefferedemail").val();
// Call to Send email address to something
$.ajax(
{
global: false,
type : "POST",
url : "http://xyz.something.com/pub/rf?_ri_=X0Gzc2X"
+ "& EMAIL_PERMISSION_STATUS_=I&email_address_=" + emailAddress + "&SOURCE_CODE=CPK&EMAIL_PREF_CH_DT=" + formattedDate,
dataType : "jsonp",
}
);
}
}
关键点是它应该使用 http 和 jsonp
我正在尝试配置类似下面的内容
<int:gateway id="asyncSomeIntService"
service-interface="com.staples.eoe.integration.AsyncSomeService" default-request-channel="someRequestChannel" />
<int-http:outbound-gateway url="http://xyz.something.com/pub/rf?_ri_=X0Gzc2X "&EMAIL_PERMISSION_STATUS_=I&email_address_={emailAddress}&SOURCE_CODE=CPK&EMAIL_PREF_CH_DT={formattedDate}"
http-method="POST" expected-response-type="java.lang.String" request-factory="requestFactory"
request-channel="someRequestChannel" reply-channel="someReplyChannel">
<int-http:uri-variable name="emailAddress" expression="headers.emailAddress" />
<int-http:uri-variable name="formattedDate" expression="headers.formattedDate" />
</int-http:outbound-gateway>
<bean id="requestFactory" class="org.springframework.http.client.SimpleClientHttpRequestFactory">
<property name="connectTimeout" value="5000" />
<property name="readTimeout" value="5000" />
</bean>
这个想法是从服务器层调用如下
Message<String> message = MessageBuilder
.withPayload("something")
.setHeader("formattedDate", "15-01-27")
.setHeader("emailAddress", customer.getPreferredEmail())
.build();
请求提交的网址很好, 但是我得到的回应部分如下 “很可能你的输入没有通过我们的验证过程。”
是否可以使用Spring Integration发送 JSONP 请求,就像上面的ajax调用一样?
答案 0 :(得分:1)
虽然好问题!
但是,如果我们转到jQuery文档,我们会看到dataType : "jsonp"
的这个描述:
如果指定了jsonp,$ .ajax()会自动追加查询字符串参数(默认情况下)callback =?到URL。传递给$ .ajax()的设置的jsonp和jsonpCallback属性可用于分别指定查询字符串参数的名称和JSONP回调函数的名称。服务器应该返回将JSON响应传递给回调函数的有效JavaScript。在将响应中包含的JSON对象传递给$ .ajax()成功处理程序之前,$ .ajax()将执行返回的JavaScript,调用JSONP回调函数。
因此,由于Spring Integration HTTP支持不是基于jQuery的框架,我们应该使用标准的JSONP规则并将callback=?
参数添加到url
。
但是......因为我们在Java中,所以我认为我们不能像JavaScript一样执行返回的响应。虽然,我们是否需要它,因为我们可以使用Java JSON功能解析下游的响应主体?