【问题标题】:Which is better, return "ModelAndView" or "String" on spring3 controller哪个更好,在 spring3 控制器上返回“ModelAndView”或“String”
【发布时间】:2011-11-02 18:45:04
【问题描述】:

ModelAndView的返回方式

@RequestMapping(value = "/list", method = RequestMethod.GET)
public ModelAndView list(
    @UserAuth UserAuth user, 
    ModelAndView mav) {

    if (!user.isAuthenticated()) {
        mav.setViewName("redirect:http://www.test.com/login.jsp");
        return mav;
    }

    mav.setViewName("list");
    mav.addObject("articles", listService.getLists());

    return mav;
}

返回字符串的方式

@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(
    @UserAuth UserAuth user, 
    Model model) {

    if (!user.isAuthenticated()) {
        return "redirect:http://www.test.com/login.jsp";
    }

    model.addAttribute("articles", listService.getLists());

    return "list";
}

这些工作相同。哪个更好?有什么区别?

【问题讨论】:

    标签: spring-mvc controller


    【解决方案1】:

    没有更好的方法。两者都是完全有效的。您选择使用哪一个取决于哪一个更适合您的应用程序 - Spring 允许您以任何一种方式进行操作。

    从历史上看,这两种方法来自不同版本的 Spring。 ModelAndView 方法是在 Spring 2.0 之前从控制器返回模型和视图信息的主要方式。现在你可以结合Model参数和String返回值,但是旧的方法仍然有效。

    【讨论】:

    • 因此 String 方法是新的。
    • @skaffman 你能解释一下 Spring 处理它的方式是否有任何区别,比如预先添加 contextpath 等。
    • 请看 (stackoverflow.com/questions/37410839/…)。在使用 ModelAndView 时我遇到了这个问题
    【解决方案2】:

    我还想加我 2 美分。第二种方法更倾向于面向约定,即开发人员确实明确提到了他的视图是什么,但它隐含的返回字符串是视图名称。所以更少的编码,可读性和标准。使用 ModelAndView 比旧方法好得多

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      相关资源
      最近更新 更多