我认为Rails在控制器设计方面做得正确的一件事是,您可以将index
控制器操作用于列表,搜索,甚至是ajax调用,因为您不会必须以典型的方式指定返回类型。
然而,对于Spring,因为我必须返回ModelAndView
以获得更传统的动作,所以我不能轻易返回纯json。我发现我经常需要为基本相同的ajax调用创建多个动作...但是因为ajax和非ajax情况需要不同的注释和返回类型,所以我必须有2个控制器动作。
有没有办法让Spring在不使用@RequestBody
之类的注释的情况下使用ajax?我可以有一个返回ModelAndView
的控制器操作,甚至可以用于不需要查看的ajax调用吗?
我真的想完全避免@RequestBody
。它不仅会导致我复制基本相同的控制器操作,从而使我的RESTful接口膨胀,但它也使得使用HandlerAdapter
进行测试变得更加困难,因为无论如何总是必须使用ModelAndView
答案 0 :(得分:3)
可以使用ViewResolver
来完成,该View
会根据请求的某些属性将响应的呈现委托给不同的MarshallingView
实现。
Spring已经有MappingJacksonJsonView
和ContentNegotiatingViewResolver
来呈现XML和JSON响应。而且,Spring正是为了这个目的而ContentNegotiatingViewResolver
,尽管它的逻辑看起来非常复杂和脆弱。
因此,您可以使用ViewResolver
或创建自己的{{1}}来解决此问题。