2015-01-29 1 views
1

나는 봄 통합 비동기 호출에 전화 아래로에서 작업 요청을 변환하려고Spring Integration에서 int-http : outbound-gateway를 사용하여 JSONP 요청을 보내는 방법은 무엇입니까?

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", 
      } 
     ); 
    } 
} 

요점은 그 HTTPJSONP 내가 뭔가를 구성하려고

를 사용하도록되어

<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 "&amp;EMAIL_PERMISSION_STATUS_=I&amp;email_address_={emailAddress}&amp;SOURCE_CODE=CPK&amp;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(); 

요청이 내가 다음과 같습니다 응답의 일부를 얻을 그러나 URL 벌금, 를 제출 "귀하의 의견은 우리의 검증 과정을 통과하지 못한 것 같다."

보낼 방법이 있습니까? Spring Integration을 사용하여 위의 ajax 호출 에서처럼 JSONP 요청을 보내주십시오.

답변

1

그래도 좋은 질문입니다! JSONP를 지정하면

, $ 아약스()가 자동으로의 쿼리 문자열 매개 변수를 추가합니다 (기본적으로 우리가 jQuery를 워드 프로세서에 가면

그러나, 우리는 dataType : "jsonp"이 설명을 볼 수 있습니다) 콜백 =? URL에. $ .ajax()에 전달 된 설정의 jsonp 및 jsonpCallback 속성을 사용하여 쿼리 문자열 매개 변수의 이름과 JSONP 콜백 함수의 이름을 각각 지정할 수 있습니다. 서버는 JSON 응답을 콜백 함수에 전달하는 유효한 JavaScript를 반환해야합니다. $ .ajax()는 응답에 포함 된 JSON 객체를 $ .ajax() 성공 처리기로 전달하기 전에 JSONP 콜백 함수를 호출하여 반환 된 JavaScript를 실행합니다.

그래서

, 봄 통합 HTTP 지원이 프레임 워크를 jQuery를 기반되지 않기 때문에, 우리는 표준 JSONP 규칙을 가서 url에 그 callback=? 매개 변수를 추가해야합니다.

우리는 Java에 있기 때문에 반환 된 응답을 JavaScript로 실행할 수 있다고 생각하지 않습니다. 하지만 자바 JSON 기능을 사용하여 다운 스트림에서 응답 본문을 파싱 할 수 있기 때문에 필요합니까?

+0

감사합니다. @Artem it worked .. – Javaboy