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

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

The way of return 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";
}

这两种工作方式是一样的。哪种方式更好? 有什么区别?

92254 次浏览

没有更好的办法了。两者都完全有效。您选择使用哪一个取决于哪一个更适合您的应用程序-Spring 允许您这样做。

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

我也要加两分钱。第二种方法更倾向于面向约定,即开发人员确实明确地提到了他的视图是什么,但它暗示返回字符串是视图名称。因此,更少的编码,可读性和标准。比使用 ModelAndView 的老方法要好得多