如何通過網址擴展影響在AnnotationMethodHandlerAdapter
中選擇消息轉換器的過程以生成POJO? 我想有一個數據對象的更多表示,而數據表示應該通過請求的URL擴展來選擇,例如, /users/2.xml
或/users/2.json
。如何在Spring MVC中基於url擴展定義消息轉換器?
當前消息處理程序,應根據URL擴展選擇的配置:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
<bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"
p:marshaller-ref="xmlMarshaller" p:unmarshaller-ref="xmlMarshaller" />
</list>
</property>
</bean>
有一種方式,這我幾乎舒服,就是用ContentNegotiatingViewResolver,但是我想繞過視圖解析過程並直接使用消息轉換器。另外,在創建動作時,在public ResponseEntity<User> showUser()
中使用ResponseEntity可對結果http狀態代碼定義(OK,NOT_FOUND,NO_CONTENT,..)進行細粒度控制。我無法找到使用ContentNegotiatingViewResolver的ResponseEntity的方式,這也可以滿足我的需求。
另一種方式可能是通過將請求accept
標頭修改爲基於url擴展名的application/xml
或application/json
。通過這種方式,所有的處理都應該直接進入配置的消息轉換器。但是,我不知道一個合理的方式來篡改請求標頭。
謝謝。
謝謝,你救了我的一天:)去'SPR-7517'方式 – 2010-09-08 19:02:11