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


114

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

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

Answers:


129

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

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


8
因此,字符串方法是新的。
akshayb

1
@skaffman你能解释一下,如果有像预谋的contextPath等。在双向弹簧过程中的任何区别
Keerthivasan

请查看(stackoverflow.com/questions/37410839/…)。使用ModelAndView时遇到了这个问题
Vishnu KR

15

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.