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

gen*_*ejo 112 controller spring-mvc

返回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;
}
Run Code Online (Sandbox Code Playgroud)

返回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";
}
Run Code Online (Sandbox Code Playgroud)

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

ska*_*man 128

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

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

  • 因此String方法是新方法. (8认同)

M S*_*ach 15

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