有没有办法使用ModelAndView获取@ ResponseBody类型的行为?

时间:2011-11-21 12:59:48

标签: ajax spring spring-mvc controller response

我认为Rails在控制器设计方面做得正确的一件事是,您可以将index控制器操作用于列表,搜索,甚至是ajax调用,因为您不会必须以典型的方式指定返回类型。

然而,对于Spring,因为我必须返回ModelAndView以获得更传统的动作,所以我不能轻易返回纯json。我发现我经常需要为基本相同的ajax调用创建多个动作...但是因为ajax和非ajax情况需要不同的注释和返回类型,所以我必须有2个控制器动作。

有没有办法让Spring在不使用@RequestBody之类的注释的情况下使用ajax?我可以有一个返回ModelAndView的控制器操作,甚至可以用于不需要查看的ajax调用吗?

我真的想完全避免@RequestBody。它不仅会导致我复制基本相同的控制器操作,从而使我的RESTful接口膨胀,但它也使得使用HandlerAdapter进行测试变得更加困难,因为无论如何总是必须使用ModelAndView

1 个答案:

答案 0 :(得分:3)

可以使用ViewResolver来完成,该View会根据请求的某些属性将响应的呈现委托给不同的MarshallingView实现。

Spring已经有MappingJacksonJsonViewContentNegotiatingViewResolver来呈现XML和JSON响应。而且,Spring正是为了这个目的而ContentNegotiatingViewResolver,尽管它的逻辑看起来非常复杂和脆弱。

因此,您可以使用ViewResolver或创建自己的{{1}}来解决此问题。