2011-11-21 157 views
1

我認爲Rails在控制器設計方面的一個優點是,您可以使用index控制器操作來控制列表以及搜索,甚至可以使用ajax調用,因爲您不必指定返回類型一個典型的方法。有沒有辦法使用ModelAndView獲得@ ResponseBody類型的行爲?

但是,對於Spring,由於我必須返回ModelAndView以獲得更傳統的操作,所以我無法輕鬆返回純json。我發現我經常必須爲ajax調用創建多個動作,這些動作基本相同......但由於ajax和非ajax情況需要不同的註釋和返回類型,因此我必須有2個控制器操作。

有沒有辦法讓Spring使用ajax而不使用像@RequestBody這樣的註釋?我可以有1個控制器操作返回ModelAndView,並且即使是不需要視圖的Ajax調用也可以工作嗎?

我真的想完全避免@RequestBody。這不僅會導致我複製基本相同的控制器操作,從而使我的RESTful界面變得更加龐大,而且還使得它們難以使用HandlerAdapter進行測試,因爲無論如何您總是必須使用ModelAndView

回答

3

它可以通過使用ViewResolver來完成,這將根據請求的某些屬性將響應的呈現委託給不同的View實現。

春天已經有MarshallingView和​​呈現XML和JSON響應。此外,春天有ContentNegotiatingViewResolver正是爲了這個目的,雖然它的邏輯看起來相當複雜和脆弱。

因此,您可以使用ContentNegotiatingViewResolver或創建您自己的ViewResolver來解決此問題。

相關問題