什么时候在Spring中使用ModelAndView vs Model?

这听起来可能听起来很愚蠢,但我不得不问。 你如何决定什么时候使用ModelAndView vs. Model

毕竟我研究了最好的答案,我发现是这一个 。 它提到了ModelAndView是一个老方法,返回的String是一个新的方法。

我的问题是我们现在应该弃用旧的ModelAndView吗? 或者是否有任何情况下需要使用ModelAndView

另外,是否有人知道为什么必须将ModelAndView更改为ModelString值作为View ,以及有哪些好处?

我总是使用控制器方法返回ModelAndView方法。 只是因为它往往使控制器方法更简洁一点。 方法参数现在是严格的input参数。 所有的output相关的数据都包含在方法返回的对象中。

ModelAndView风格似乎与不喜欢将input参数更新为方法的人共鸣。 坚持认为这会构成一个副作用,一个危险的模式,因为你不能可靠地预测方法将要做什么 – 它可以在返回的对象中返回数据,或者它可以更新任何input参数中的任何东西。

所以有些人仍然会继续喜欢ModelAndView

Model作为方法参数并返回string作为视图名称的新样式。 似乎来自一个稍微不同的devise方法。 在这里,模型对象被认为是被传递给多个处理程序的事件或项目的种类,然后被返回到它们被呈现的视图。 这让我想起AWT / Swing世界中的事件是如何处理的。 这个模型与多个处理程序可以在Model对象之上构build的方法更加一致,直到它达到视图。

所以在这一天结束的时候,似乎没有一个明确的理由来批评或推广这两种方法。 您应该使用与您的整体devise理念更加一致的风格。

希望这可以帮助。

我可以发现的一个区别是ModelAndView对象可以设置对视图对象的直接引用:

 ModelAndView mav = ... mav.setView(myView); 

而如果使用模型和string,则需要使用视图parsing器将视图名称parsing为实际视图

 public String myHandler(...) { return "myviewname"; // has to have a resolver from "myviewname" into an actual view } 

在search引擎优化的angular度来看,如果我们有任何要求,我们可以使用ModelAndView来应用301redirect,我们不能使用Model来实现。