哪个更好,在spring3控制器上返回“ModelAndView”或“String”

时间:2011-08-24 12:36:50

标签: spring-mvc controller

返回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;
}

返回String的方式

@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";
}

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

2 个答案:

答案 0 :(得分:127)

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

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

答案 1 :(得分:15)

我想加我2美分。第二种方法更倾向于面向约定,即开发人员明确提到他的观点是什么,但隐含的返回字符串是视图名称。因此编码较少,可读性和标准性。使用ModelAndView

比使用旧方法好多了