2011-11-21 164 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来解决此问题。

相关问题