【问题标题】:Spring MVC Custom ViewSpring MVC 自定义视图
【发布时间】:2013-06-03 19:18:57
【问题描述】:

我正在重构一个遗留应用程序以使用 Spring MVC。我所有的控制器(旧版)都返回一个 Model 类型的对象,而我的旧版调度程序编写 model.getContent() 的输出,getContent 方法进行内部处理并返回一个 json 字符串。我有数百个控制器,不想重写它们。是否可以编写自定义视图处理程序并将其包含在 spring servlet 配置中?

样品控制器:

public UserList extends BasicAction {
  @Autowired
  UserService userService;
  @Autowired
  UserCommand userCommand;

  @Override
    public Model getModel(Request req, Response resp)
            throws ServletException, IOException {
        Model model = new Model();


        List<User> users;
        try {
            users = userService.getUsers((UserCriteria)userCommand.getResult());
            model.addCollection(users);
            model.setWrapper(new UserWrapper());


        } catch (ValidationException e) {

            e.printStackTrace();
        } catch (WebCommandException e) {

            e.printStackTrace();
        }



        return model;
    }
}

我打算注释为@Controller。指定 @RequestMapping 或在 xml 配置中,删除基类 BasicAction(旧版 mvc)。我最近在这个项目中引入了 spring 并重构为使用依赖注入和请求作用域命令对象(请求包装器)

【问题讨论】:

    标签: java spring model-view-controller


    【解决方案1】:

    最直接的方法是在您的Model 类上实现View 接口。然后你的旧控制器可以直接返回这个类(就像现在一样),它将由DispatcherServlet 通过调用它的render 方法来呈现。

    另一种可能性是实现您自己的HandlerMethodReturnValueHandler,其中处理程序可以实际呈现响应并将响应标记为已处理 (mavContainer.setRequestHandled(true);),以便DispatcherServlet 不会尝试呈现任何视图。

    【讨论】:

      【解决方案2】:

      我认为您想要做的是创建一个自定义 ViewResolver 来输出您的 JSON 响应。这将在 Spring MVC 中配置以设置 ViewResolver 列表,将您的列表置于顶部以获得更多优先级。它应该工作的方式(根据我的回忆)是 Spring MVC 将从列表的顶部开始,并尝试每个 ViewResolver 直到找到一个返回处理返回类型的那个。您将不得不谷歌如何制作自定义 ViewResolver,因为我只使用过它们,从未创建过,但我知道它是一个界面,所以它应该是可行的。我相信这是唯一不需要在控制器中更改任何代码的方法。

      然而,执行 JSON 的更“首选”方法是让 Jackson 在您的类路径中,然后简单地将您想要序列化的对象返回为 JSON。 Spring 会自动将其转换为 JSON,我相信使用他们提供的 ViewResolver。但是,我可以肯定地认为不想重构大量工作代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-14
        • 1970-01-01
        • 1970-01-01
        • 2018-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多