JSONP를 사용하여 Spring MVC에서 컨트롤러 서비스를 호출하고 있습니다. 콜백에 래핑 된 결과를 반환하는 사용자 지정 필터가 있습니다. 이 예제는 http://jpgmr.wordpress.com/2010/07/28/tutorial-implementing-a-servlet-filter-for-jsonp-callback-with-springs-delegatingfilterproxy/입니다. ContentNegotiatingViewResolver도 사용하고 있지만 결과는 콜백에서 XML을 계속 반환합니다. 왜 계속 그렇게 할거야?JSONP 및 사용자 정의 필터 Spring MVC 대신 XML 반환
jQuery1509349652162468509_1300839533498(<?xml version="1.0" encoding="UTF-8" standalone="yes"?><followResponse><id>0</id></followResponse>);
서블릿-context.xml에
<beans:bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<beans:property name="order" value="1"/>
<beans:property name="mediaTypes">
<beans:map>
<beans:entry key="json" value="application/x-json"/>
<beans:entry key="json" value="text/json"/>
<beans:entry key="json" value="text/x-json"/>
<beans:entry key="json" value="application/json"/>
<beans:entry key="xml" value="text/xml"/>
<beans:entry key="xml" value="application/xml"/>
</beans:map>
</beans:property>
<beans:property name="defaultViews">
<beans:list>
<beans:bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
<beans:bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<beans:property name="marshaller">
<beans:bean class="org.springframework.oxm.xstream.XStreamMarshaller" />
</beans:property>
</beans:bean>
</beans:list>
</beans:property>
</beans:bean>
이것은 JSONP 요청에 대한 해결 방법 이었습니까? –
이것은 JSON을 일반적으로 반환하기위한 해결 방법입니다. 내 응용 프로그램에는 jstl 뷰를 사용하는 일반 컨트롤러가 있지만 XML 또는 JSON 형식의 데이터도 노출됩니다. @ResponseBody와 같이 pojo를 반환 할 때 모든 것이 잘 작동했지만, Jaxb 주석으로 마크 업 된 pojo를 반환하려고 시도했을 때, XML이 항상 반환 될 것이기 때문에 (확장자가 .json이고 ContentNegotiatingViewResolver가 확장을 선호하도록 적절하게 구성 되었기 때문에). 나는이 정보가 받아 들일만한 해결책에 가까워 질 수 있다고 생각했다. –
이것으로부터 무엇이든 가져갈 수 있다면 @ResponseBody를 사용하면 ContentNegotiatingViewResolver를 우회하여 대신 등록 된 MessageConverters를 사용할 것입니다. 이 경우 적절한 변환기는 "accept"헤더에 의해 선택됩니다. 위에서 당신은 accept 헤더를 무시하고 있다고 언급했지만, 이는 AnnotationMethodHandlerAdapter에 의해 선택된 MessageConverters가 아니라 ContentNegotiatingViewResolver에만 해당됩니다. –