spring - Spring MVC 中返回 ModelAndView 和返回 String 有什么区别?

标签 spring

我想知道ModelAndView和String的区别。

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

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

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

最佳答案

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

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

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

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

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

关于spring - Spring MVC 中返回 ModelAndView 和返回 String 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25988442/

相关文章:

带 mustache 的 Controller 未接收到 Spring 表单数据

java - 使用 Spring 框架将 Excel 数据导入数据库

java - Spring Boot 2.2.4 - 禁用安全性

Spring 事务管理 - 对同一 URL 的多个请求

java - 如何最好地在 Spring Integration 中实现 DynamicPoller

java - 将对象列表从 View 发送到 Controller : limited to 256 objects

java - 返回可能已设置的实例时,DeferredResult 是否存在竞争条件?

java - bean 'container' 中发现不明确的工厂方法匹配

java - Spring Kinesis 消费者太慢

java - ElasticSearch Boost 字段并按日期排序