Spring MVC 中返回 ModelAndView 和返回 String 有啥区别?

Posted

技术标签:

【中文标题】Spring MVC 中返回 ModelAndView 和返回 String 有啥区别?【英文标题】:What is the difference between return ModelAndView and return String in Spring MVC?Spring MVC 中返回 ModelAndView 和返回 String 有什么区别? 【发布时间】:2014-09-23 06:37:09 【问题描述】:

我想知道ModelAndView和String的区别。

@RequestMapping(value="/")
    public ModelAndView mainPage() 
        return new ModelAndView("home");

第二段代码是关于返回字符串的:

@RequestMapping(value="/")
    public String mainPage() 
        return "home";

【问题讨论】:

docs.spring.io/spring/docs/4.1.x/spring-framework-reference/… 你也可以参考下面的答案:***.com/questions/7175509/… 【参考方案1】:

你可以从一个控制器返回很多东西,Spring 会自动尝试从那里推断出要做什么。

当您返回 ModelAndView 时,需要从控制器传递的所有信息都嵌入其中。没有惊喜。

如果您返回一个字符串,它将假定这是要使用的视图的名称。它将把它包装在一个 ModelAndView 对象中,字符串作为视图,同时嵌入现有的模型。

Spring 在返回类型和参数类型上做了很多“魔法”。 这使您可以以更直观的方式编写代码,即以下两个示例相同:

@RequestMapping(value="/")
public ModelAndView mainPage() 
    Model m = new Model();
    m.put("key", "value");
    return new ModelAndView(m,"main");

@RequestMapping(value="/")
public String mainPage(Model m) 
    m.put("key", "value");
    return "main";

第二个变体不太冗长,更容易单独测试。传入的模型将是一个空模型(除非从其他控制器转发)。

【讨论】:

以上是关于Spring MVC 中返回 ModelAndView 和返回 String 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC 中返回 ModelAndView 和返回 String 有啥区别?

Spring mvc 返回json数组中的日期怎么格式化?

Spring MVC:如何在@ResponseBody 中返回图像?

如何在 Spring MVC 中返回 403 Forbidden?

关于 Spring MVC 返回 json 字符串

Spring Boot Mvc 统一返回结果