2016-10-24 3 views
0

이 문제는 정말 나를 미치게한다. 나는 java 웹 애플리케이션을 가지고있다 : appA는 json 형식의 일부 객체 (이미지가 들어있는)를 반환하는 REST 서비스를 게시하고 appB는 소비한다. 서비스 및 이미지를 보여줍니다. 내 로컬 컴퓨터에서 작동하지만 (CORS 오류가 표시되지만) 이제는 웹 환경 (Layershift)을 사용하고 "NetworkError : 404 Not Found - http://app-demo.j.layershift.co.uk/myservice/get/c80e9306105f4448?callback=myCallback&_=1477167892656"이 표시됩니다.
나는 많이 읽었습니다. CORS 및 JSONP의 예제 중 일부는 있지만 내 코드에 무엇이 잘못되었는지 알 수 없으므로 아무도 힌트를 제공 할 수 있습니까? APPA에서JSONP 호출을 할 수 없다

컨트롤러 : APPA에

@RestController 
public class MyController { 
@RequestMapping(value="/myservice/get/{somevar}") 
public @ResponseBody MyObject getMyObject (@PathVariable String somevar, HttpServletRequest request, HttpServletResponse response) { 
    MyObject obj = new MyObject(); 
    //some logic 
    return obj; 
} 
} 

ControllerAdvice : appB에서 JSONP 호출로

@ControllerAdvice 
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice { 
public JsonpAdvice() { 
    super("myCallback"); 
} 
} 

는 자바 스크립트 코드 :

어떤 도움을 주시면 감사하겠습니다

(function($) { 
function myCallback(data) { 
    if (data.status == "OK") { 
     //shows the image contained 
    } 
} 

$.fn.callWithJsonP = function(somevar) { 
    $.ajax({ 
     url: "myservice/get/" + somevar, 
     type: 'GET', 
     dataType: "jsonp", 
     jsonpCallback: "myCallback" 
    }); 
}; 
})(jQuery); 

에 관하여 추신 : 또한 지시문을 추가하려고 "헤더 추가 Access-Control-Allow-Origin "*" "을 Apache에서 사용하지만 동일한 결과가 나타납니다.

+0

404는 존재하지 않는 끝점에 액세스하려고한다는 것을 의미합니다. 올바른 URL을 사용하고 있습니까? –

+0

안녕하세요 @ JoeAttardi, 예, URL이 정확합니다. – maxivis

+0

왜 'jsonp'를 사용하고 계시나요? 다른 도메인에 있습니까? 또한 나는 ajax url이'/ "myservice/get /"+ somevar "와 같이 시작 /''을 가질 필요가 있다고 생각한다. 'applicationContext'가 필요합니다 – brk

답변

0

마침내 JSONP 호출을 만들 수 있지만 문제를 해결하지 못했지만 호출 할 수 있으므로 변경 사항을 게시합니다.

@RestController 
public class MyController { 
    @RequestMapping(value="/myservice/get/{somevar}") 
    public MappingJacksonValue getMyObject (@RequestParam String callback, @PathVariable String somevar, HttpServletRequest request, HttpServletResponse response) { 
     MyObject obj = new MyObject(); 
     //some logic 
     MappingJacksonValue value = new MappingJacksonValue(obj); 
     value.setJsonpFunction(callback); 
     return value; 
    } 
} 

공지 반환 형식이 MappingJacksonValue (JSONP with Spring 3.0 and Jackson 덕분에), 그리고 자바 스크립트 코드는 다음과 같습니다 모든
첫째, 나는 @ResponseBody를 사용하지 않는 메인 컨트롤러에, 나는 이런 식으로 변경했습니다 이 :

$.fn.callWithJsonP = function(somevar) { 
    var url = "/myservice/get/" + somevar + "?callback=myCallback"; 
    $.getJSON(url, function(data) { 
     if (data.value.status == "OK") { 
      //show the image contained 
     } 
    }); 
} 

"myCallback"이라는 함수를 정의 할 필요가 없습니다. 내 로컬 컴퓨터에서 테스트했는데 작동 중입니다.
제안 해 주신 모든 분들께 감사드립니다.

0

다음은 Jquery를 사용하여 JsonP ajax 호출을 수행하는 방법입니다. 예컨대 : 서버 측

$.ajax({ 
    url: "http://localhost/ny-app/getJSfunction", 
    jsonp: "myfunctionName", 
    dataType: "jsonp", 
    data: soomedata, 
    success: function(response) { 
     console.log(response); // server response 
    } 
}); 

핸들이 호출하고 함수를 반환 일부 데이터를 반환하는 자바 스크립트 코드를 캡슐화. 반환 된 자바 스크립트는 다음과 같습니다.

function myfunctioname(){ 
    // some code 
    return 'whatever you want' ; 
} 

JQuery ajax는 자동으로 반환 된 javascript 함수를 실행합니다.

희망이 도움이됩니다.

+0

URL이 잘못되어 404 오류가 발생합니다. 이것은 어떻게 관련이 있습니까? – Barmar

+0

@DragoRaptor에게 감사하지만 "성공"기능이 필요합니까? 정의에 따라 "성공"대신 "myfunctionName"이라고해서는 안됩니다. – maxivis

관련 문제