【问题标题】:Is there a way to get @ResponseBody-type behaviour using ModelAndView?有没有办法使用 ModelAndView 获得 @ResponseBody 类型的行为?
【发布时间】:2012-01-02 23:24:18
【问题描述】:

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

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

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

我真的很想完全避免@RequestBody。它不仅会导致我复制本质上相同的控制器操作,从而使我的 RESTful 界面膨胀,而且还会使它们更难使用 HandlerAdapter 进行测试,因为无论如何你总是必须使用 ModelAndView

【问题讨论】:

    标签: ajax spring spring-mvc controller response


    【解决方案1】:

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

    Spring 已经有 MarshallingViewMappingJacksonJsonView 来呈现 XML 和 JSON 响应。此外,Spring 有 ContentNegotiatingViewResolver 正是为了这个目的,尽管它的逻辑看起来相当复杂和脆弱。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-23
      • 2021-05-16
      • 2011-12-15
      • 2011-07-24
      • 1970-01-01
      • 2022-01-26
      • 2023-02-11
      • 1970-01-01
      相关资源
      最近更新 更多