本篇文章主要介绍了Spring MVC中如何在前后端传输数据。

后端 ➡ 前端

在Spring MVC中这主要通过Model将数据从后端传送到前端,一般的写法为:

@RequestMapping(value = "/index", method = RequestMethod.POST)
public String index(Model model){
String greeting = "Hello !"
model.addAttribute("greetingStr", greeting);
return "index";
}

首先需要定义一个Model,然后为Model添加属性,并绑定数据,最后将Model添加到视图。在实际开发时也可以不按照上述步骤。

不指定视图名

视图解析器会根据请求路径/index推断视图名,去掉/仍然可以得到正确的视图名index。此时的写法为:

@RequestMapping(value = "/index", method = RequestMethod.POST)
public String index(Model model){
String greeting = "Hello !"
return greeting;
}

不使用Model

因为Model本身就继承自LinkedHashMap类(Model本身只是一个接口类,确切的说是实例化的model所属的类继承自LinkedHashMap),因此可以将数据存储在Map中再传送到前端。此时的写法为:

@RequestMapping(value = "/index", method = RequestMethod.POST)
public String index(Map map){
String greeting = "Hello !"
map.put("greetingStr", greeting);
return "index";
}

不指定模型属性

当不指定Model中填充数据的key时,Spring MVC会根据值类型推断,返回key的替代名。此时的写法为:

@RequestMapping(value = "/index", method = RequestMethod.POST)
public String index(Model model){
String greeting = "Hello !"
model.addAttribute(greeting);
return "index";
}
//此时的"greeting"的key会被设置为"String",等价于map.put("String", greeting);

以上方式的结果都是一致的,均会在model中会存储一个和key对应的数据,然后将model传送到到视图中,视图可以根据key直接获取到对应的数据。

前端 ➡ 后端

在Spring MVC中支持多种方式将数据从前端传送到后端。

查询参数

本质上是通过HTTP发起的一个带有参数的RPC请求,请求的形式为"/aa?name=deyken",后端处理形式为:

@RequestMapping(value = "/aa", method = RequestMethod.POST)
public String func(Model model, @RequestParam("name") String name) {
...
}

路径变量

直接请求资源,请求的形式为"/aa/deyken",后端处理的形式为:

@RequestMapping(value = "/aa/{name}", method = RequestMethod.POST)
public String func(Model model, @PathVariable("name") String name) {
...
}

实际使用中推荐第二种方式。

表单

在Spring MVC中同样支持表单数据的前端到后台传输。以用户登录为例,表单形式为:

<form action="/login" method="post">
name:<input type="text" name="name"/>
password:<input type="text" name="password"/>
<input type="submit"/>
</form>

后端只需在方法参数列表里接收传送过来的变量,而无需再指定查询参数或路径变量:

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String add(Model model, String name, String password){
...
}

如果已经定义过用户User类:

public User {
String name;
String password;
...Setter()
...Getter()
}

那么Spring MVC会将表单传送过来的数据自动封装为一个User对象,此时后端方法可以这么写:

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String add(Model model, User user){
...
}

后记

以上仅描述了在Spring MVC中几种前后端数据交互的方式,但在实际项目中为了使前后端开发分离,一般不适用上述方式,下篇文章我将介绍使用ajax从前端读取后端数据的具体方法。

Spring MVC前后端的数据传输的更多相关文章

  1. Spring MVC前后端数据交互总结

    控制器 作为控制器,大体的作用是作为V端的数据接收并且交给M层去处理,然后负责管理V的跳转.SpringMVC的作用不外乎就是如此,主要分为:接收表单或者请求的值,定义过滤器,跳转页面:其实就是ser ...

  2. Spring MVC 前后端 Json 方式交互和处理

    众所周知,在mvc中,数据是在各个层次之间进行流转是一个不争的事实. 而这种流转,也就会面临一些困境,这些困境,是由于数据在不同世界中的表现形式不同而造成的.   数据在页面上是一个扁平的,不带数据类 ...

  3. 关于使用spring mvc前后端上传数据日期格式

    前端页面传入数据到后台,String,int等等类型都很友好,但是Date类型不能直接上传到服务器.否则会报异常![在这里插入图片描述](https://img-blog.csdnimg.cn/201 ...

  4. 八个开源的 Spring Boot 前后端分离项目,一定要收藏!

    八个开源的 Spring Boot 前后端分离项目 最近前后端分离已经在慢慢走进各公司的技术栈,不少公司都已经切换到这个技术栈上面了.即使贵司目前没有切换到这个技术栈上面,我们也非常建议大家学习一下前 ...

  5. 七:Spring Security 前后端分离登录,非法请求直接返回 JSON

    Spring Security 前后端分离登录,非法请求直接返回 JSON 解决方案 在 Spring Security 中未获认证的请求默认会重定向到登录页,但是在前后端分离的登录中,这个默认行为则 ...

  6. 使用REST风格完成MVC前后端分离

    一个具有REST风格项目的基本特征: 具有统一响应结构 前后台数据流转机制(HTTP消息与Java对象的互相转化机制) 统一的异常处理机制 参数验证机制 Cors跨域请求机制 鉴权机制 一:统一响应结 ...

  7. 七个开源的 Spring Boot 前后端分离项目,一定要收藏!

    前后端分离已经在慢慢走进各公司的技术栈,根据松哥了解到的消息,不少公司都已经切换到这个技术栈上面了.即使贵司目前没有切换到这个技术栈上面,松哥也非常建议大家学习一下前后端分离开发,以免在公司干了两三年 ...

  8. Spring Cloud 前后端分离后引起的跨域访问解决方案

    背景 Spring Cloud 微服务试点改造,目前在尝试前后端分离. 前台A应用(本机8080端口),通过网管(本机8769端口)调用后台应用B(本机8082端口).应用C发布的http服务.. A ...

  9. Aspnet Mvc 前后端分离项目手记(三)关于restful 风格Url设计

    RESTful 不是新东西,简单理解它的核心思想就是最大程度的利用http协议的一些特点,比如uri,比如请求动词,在前后端分离的项目中会有大大的好处 ,好的设计的url简单明了,胜过详细的说明文档. ...

随机推荐

  1. Ajax【介绍、入门、解决Ajax中文、跨域、缓存】

    什么是Ajax Ajax(Asynchronous JavaScript and XML) 异步JavaScript和XML Ajax实际上是下面这几种技术的融合: (1)XHTML和CSS的基于标准 ...

  2. HashMap、HashTable、ArrayList、LinkedList、Vector区别

    HashTable和HashMap区别 ①继承不同. public class Hashtable extends Dictionary implements Map public class Has ...

  3. 多个版本的Python如何设置不冲突

    同时装有Python2.7和Python3.5说明. 问题1: 设置右键点击"Edit with IDLE"选项打开的Python版本? 在运行输入"regedit&qu ...

  4. eclipse安装java ee插件方法步骤

    1.本人以前使用的MyEclipse进行Javaweb开发,但是后来由于myeclipse实在太臃肿,经常在运行的过程中不流畅 (可能电脑内存也不是太高吧)   !所以坚决换用eclipse,但是问题 ...

  5. [Troubleshooting] Inter VT 主板已开启,但测试工具显示未开启.

    一周前给神船Z7SL3重装了Win10的系统,但安装VMware时遇到了比较诡异的事 主板确定开启了VT  但是VMware显示不支持64位 用工具Securable和Intel(R) Process ...

  6. js两个叹号的使用

    1.浏览器判断空和未定义以及零时返回的值如下: alert(undefined)  //undefined alert(null)  //null alert(0)  //0 2.有时为了便于下一步判 ...

  7. ThinkPHP控制器输出防止乱码小技巧

    在控制器中加一句:试试看 header('content-type:text/html;charset=utf-8');

  8. 【重点突破】——使用Express创建一个web服务器

    一.引言 在自学node.js的过程中有一个非常重要的框架,那就是Express.它是一个基于NodeJs http模块而编写的高层模块,弥补http模块的繁琐和不方便,能够快速开发http服务器.这 ...

  9. 从 JavaScript 到 TypeScript 系列

    随着应用的庞大,项目中 JavaScript 的代码也会越来越臃肿,这时候许多 JavaScript 的语言弊端就会愈发明显,而 TypeScript 的出现,就是着力于解决 JavaScript 语 ...

  10. MyBatis Generator配置示例

    (一).MBG介绍 MyBatis Generator(MBG)是一个Mybatis的代码生成器,它可以用来生成可以访问(多个)表的基础对象.MBG解决了对数据库操作有最大影响的一些简单的CRUD(插 ...