복붙노트

[SPRING] Spring MVC와 다중 응답 유형으로 JSONP를 지원하는 방법

SPRING

Spring MVC와 다중 응답 유형으로 JSONP를 지원하는 방법

요청한 따라 HTML 또는 JSON을 반환하는 컨트롤러에 메서드가 있습니다. 다음은이 질문에서 발견 할 수있는 방법에 대한 정보를 바탕으로 작성된 그런 방법의 해체 된 예입니다.

@RequestMapping(value="callback")
public ModelAndView callback(@RequestParam("c") String c) {
    Map response = new HashMap<String, String>();
    response.put("foo", "bar");
    return new ModelAndView("fake", "data", new JSONPObject(c, response));
}

JSONPObject를 모델에 넣으려면 HTML이 요청 된 경우 렌더링하는 뷰에서이 뷰에 도달 할 수 있어야합니다. 그러나 이것은 JSON을 콜백으로 렌더링 할 때 문제가된다.

curl 'http://localhost:8080/notes/callback.json?c=call'
{"data"call(:{"foo":"bar"})}

보시다시피 모델의 "데이터"슬롯에 데이터를 넣으므로 모델이 JSON으로 렌더링 될 때 여분의 래핑이 있습니다. 내가 찾고있는 것은 렌더링 된 JSON (기술적으로 JSONP)이다.

call({"data":{"foo":"bar"}})

렌더링 중에 JSONPObject에 액세스하는보기를 반환하는 기능을 중단하지 않고 어디로 가려고하는지 알 수 있습니까?

해결법

  1. ==============================

    1.JSONP를 Spring MVC와 함께 사용하는 방법입니다. 필요에 따라 JSONP를 수정하십시오.

    JSONP를 Spring MVC와 함께 사용하는 방법입니다. 필요에 따라 JSONP를 수정하십시오.

    서버 측 :

    @RequestMapping(value="/notes/callback.json", method=RequestMethod.GET)
    public void jsonpCallback(@RequestParam("callback") String callback, HttpServletResponse response) {
       response.setContentType("text/javascript; charset=UTF-8");
       PrintWriter out = response.getWriter();
       out.print(callback + "(" + jsonDataString + ")");
    }
    

    클라이언트 측 :

    <script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
    <script type="text/javascript">
    
    function yourfunction() {
        jQuery.getJSON("http://localhost:8080/notes/callback.json?callback=?", 
            function(data) {
                alert(data.someParam);
            });
    }
    
    </script>
    
  2. ==============================

    2.나는 이것을 알아 내었다. JSON을 렌더링 할 때 Spring은 내 구성에 따라 MappingJacksonJsonView를 사용하고 있습니다. 이 뷰에는지도에서 단일 항목을 찾아서 렌더링 전에 추출하도록 지시하는 속성이 있습니다. 이 속성을 설정하면 이제이 기능이 작동합니다.

    나는 이것을 알아 내었다. JSON을 렌더링 할 때 Spring은 내 구성에 따라 MappingJacksonJsonView를 사용하고 있습니다. 이 뷰에는지도에서 단일 항목을 찾아서 렌더링 전에 추출하도록 지시하는 속성이 있습니다. 이 속성을 설정하면 이제이 기능이 작동합니다.

        <property name="defaultViews">
            <list>
                <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" >
                    <property name="extractValueFromSingleKeyModel" value="true" />
                </bean>
            </list>
        </property>
    
  3. from https://stackoverflow.com/questions/10323625/how-to-support-jsonp-with-spring-mvc-and-multiple-response-types by cc-by-sa and MIT license