我正在使用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>);
的servlet-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請求的工作? – 2011-03-23 16:03:26
這是一個通用的返回JSON的工作。我的應用程序具有普通的控制器,它們只是使用jstl視圖,但它們也以XML或JSON的形式公開數據。當以@ResponseBody的形式返回pojo時,一切正常,但是當我試圖返回一個標記爲Jaxb註釋的pojo時,因爲它總是返回XML(即使擴展名爲.json,並且我正確配置了ContentNegotiatingViewResolver以支持擴展)。我想這個信息可能至少讓你更接近可接受的解決方案。 – 2011-03-23 16:08:46
我猜如果你可以從這裏取任何東西,它使用@ResponseBody將繞過ContentNegotiatingViewResolver,而是使用註冊的MessageConverters。在這種情況下,適當的轉換器由「接受」標題選擇。上面提到您忽略了接受標頭,但這僅適用於ContentNegotiatingViewResolver,不適用於由AnnotationMethodHandlerAdapter選擇的MessageConverters。 – 2011-03-23 16:42:28