数据之桥:深入Spring MVC中传递数据给视图的实用指南

简介: 数据之桥:深入Spring MVC中传递数据给视图的实用指南

在 SpringMVC 中,控制器方法的参数可以使用 ModelModelMap 和普通的 Map 来传递数据给视图。

Model

Model 是一个接口,用于封装控制器方法的模型数据。它允许控制器方法将数据添加到模型中,并在视图中进行访问。

用法:

  • 使用 addAttribute(String name, Object value) 方法将属性添加到模型中。
  • 在视图中通过 ${name} 表达式访问模型中的属性。
  • 注意点:
  • Model 接口是 SpringMVC 特定的,与 Web 技术无关。
  • 是一个接口,需要使用具体的实现类(如 ModelAndView )进行操作。

示例:

@RequestMapping("/example")
public String exampleMethod(Model model) {
    model.addAttribute("message", "Hello, World!");
    return "exampleView";
}

ModelMap:

ModelMapModel 接口的实现类,提供了更多的便捷方法。

用法:

  • 可以使用 addAttribute(String name, Object value) 方法将属性添加到模型中。
  • 在视图中通过 ${name} 表达式访问模型中的属性。
  • 注意点:
  • ModelMap 实现了 Map 接口,因此具备了 Map 的特性。

示例:

@RequestMapping("/example")
public String exampleMethod(ModelMap model) {
    model.addAttribute("message", "Hello, World!");
    return "exampleView";
}

普通的 Map:

普通的 Map 是一种常规的 Java 集合,用于封装模型数据。

用法:

  • 使用 put(String key, Object value) 方法将属性添加到 Map 中。
  • 在视图中通过 ${key} 表达式访问 Map 中的属性。
  • 注意点:
  • 可以使用任何类型的 Map 来传递数据,但推荐使用 ModelModelMap,因为它们是 SpringMVC 框架提供的专门用于封装模型数据的类。

示例:

@RequestMapping("/example")
public String exampleMethod(Map<String, Object> model) {
    model.put("message", "Hello, World!");
    return "exampleView";
}

注意

1. 通过 Model、ModelMap 进行作用域的处理,就可以解决视图模板技术耦合的问题。
2. SpringMVC 中提供 Model 和 ModelMap 这两种方式处理 requst 作用域,他们的区别是什么?

表现形式上虽然是通过两种开发方式,声明的形参类型不同,一个是 Model,另一个是 ModelMap。但是在运行时,SpringMVC 会动态的提供对应的实现类型,名字是BindingAwareModelMap。所以本质上两者是相同的。

3. 那为什么不直接使用 BindingAwareModelMap?

在源码中 SpringMVC 不建议使用 BindingAwareModelMap。其原因是因为如果直接使用 BindingAwareModelMap 的话,会存在耦合。MVC 开发时使用 BindingAwareModelMap,而 WebFlux 开发时使用的是 ConcurrentModel。如果替换 Web 的实现方案,直接使用 BindingAwareModelMap 话,不利于项目的维护,得修改代码。所以更加建议使用 Model 接口处理。

4. SpringMVC 为什么会提供二种开发方式?Model、ModelMap 这两种开发方式那种方式更加推荐使用?

不推荐使用 ModelMap,他是 SpringMVC 2.0 引入的类型。当时的设计只是针对于 MVC 的场景使用,替换作用域。而后续 Spring 又支持了 WebFlux 的开发方式。显然使用 ModelMap 就无法使用了。所以 SpringMVC 在 2.5.1 引入了全新设计的接口 Model,他既可以兼容传统 MVC 也可以在 WebFlux 中使用。更加有利于项目维护。鉴于此更加推荐使用 Model 的方式。而 SpringMVC 为了兼容性,所以两者目前都可以使用。

5. 如果 redirect 跳转,数据该如何传递?

SpringMVC 会自动的把 Model 或者 ModelMap 中的数据,通过 ? 的形式在 url 上进行拼接,从而传递数据。我们在使用 redirect 跳转前只需要将要传递的数据放在 Model 或者 ModelMap 中即可,不需要手动拼接参数。


相关文章
|
11月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
8657 127
|
11月前
|
NoSQL Java 数据库连接
《深入理解Spring》Spring Data——数据访问的统一抽象与极致简化
Spring Data通过Repository抽象和方法名派生查询,简化数据访问层开发,告别冗余CRUD代码。支持JPA、MongoDB、Redis等多种存储,统一编程模型,提升开发效率与架构灵活性,是Java开发者必备利器。(238字)
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——封装统一返回的数据结构
本文介绍了在Spring Boot中封装统一返回的数据结构的方法。通过定义一个泛型类`JsonResult&lt;T&gt;`,包含数据、状态码和提示信息三个属性,满足不同场景下的JSON返回需求。例如,无数据返回时可设置默认状态码&quot;0&quot;和消息&quot;操作成功!&quot;,有数据返回时也可自定义状态码和消息。同时,文章展示了如何在Controller中使用该结构,通过具体示例(如用户信息、列表和Map)说明其灵活性与便捷性。最后总结了Spring Boot中JSON数据返回的配置与实际项目中的应用技巧。
1119 0
|
JSON Java fastjson
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——使用 fastJson 处理 null
本文介绍如何使用 fastJson 处理 null 值。与 Jackson 不同,fastJson 需要通过继承 `WebMvcConfigurationSupport` 类并覆盖 `configureMessageConverters` 方法来配置 null 值的处理方式。例如,可将 String 类型的 null 转为 &quot;&quot;,Number 类型的 null 转为 0,避免循环引用等。代码示例展示了具体实现步骤,包括引入相关依赖、设置序列化特性及解决中文乱码问题。
857 0
|
JSON Java fastjson
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——Spring Boot 默认对Json的处理
本文介绍了在Spring Boot中返回Json数据的方法及数据封装技巧。通过使用`@RestController`注解,可以轻松实现接口返回Json格式的数据,默认使用的Json解析框架是Jackson。文章详细讲解了如何处理不同数据类型(如类对象、List、Map)的Json转换,并提供了自定义配置以应对null值问题。此外,还对比了Jackson与阿里巴巴FastJson的特点,以及如何在项目中引入和配置FastJson,解决null值转换和中文乱码等问题。
1907 0
|
11月前
|
JSON 前端开发 JavaScript
Mvc视图的4种提交方式
本文介绍了jQuery中get/post与ajax提交方式,以及原生JS通过请求头和FormData对象发送数据的方法。涵盖参数配置、请求类型、回调处理等要点,适用于表单及数据提交场景。
310 1
|
人工智能 安全 Dubbo
Spring AI 智能体通过 MCP 集成本地文件数据
MCP 作为一款开放协议,直接规范了应用程序如何向 LLM 提供上下文。MCP 就像是面向 AI 应用程序的 USB-C 端口,正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 提供了一个将 AI 模型连接到不同数据源和工具的标准化方法。
10474 125
|
JSON Java 数据格式
Spring Boot返回Json数据及数据封装
在Spring Boot中,接口间及前后端的数据传输通常使用JSON格式。通过@RestController注解,可轻松实现Controller返回JSON数据。该注解是Spring Boot新增的组合注解,结合了@Controller和@ResponseBody的功能,默认将返回值转换为JSON格式。Spring Boot底层默认采用Jackson作为JSON解析框架,并通过spring-boot-starter-json依赖集成了相关库,包括jackson-databind、jackson-datatype-jdk8等常用模块,简化了开发者对依赖的手动管理。
929 3
|
存储 NoSQL Java
使用Java和Spring Data构建数据访问层
本文介绍了如何使用 Java 和 Spring Data 构建数据访问层的完整过程。通过创建实体类、存储库接口、服务类和控制器类,实现了对数据库的基本操作。这种方法不仅简化了数据访问层的开发,还提高了代码的可维护性和可读性。通过合理使用 Spring Data 提供的功能,可以大幅提升开发效率。
524 21
|
存储 Java API
如何使用 Java 记录简化 Spring Data 中的数据实体
如何使用 Java 记录简化 Spring Data 中的数据实体
328 9