Spring MVC前后端的数据传输
本篇文章主要介绍了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前后端的数据传输的更多相关文章
- Spring MVC前后端数据交互总结
控制器 作为控制器,大体的作用是作为V端的数据接收并且交给M层去处理,然后负责管理V的跳转.SpringMVC的作用不外乎就是如此,主要分为:接收表单或者请求的值,定义过滤器,跳转页面:其实就是ser ...
- Spring MVC 前后端 Json 方式交互和处理
众所周知,在mvc中,数据是在各个层次之间进行流转是一个不争的事实. 而这种流转,也就会面临一些困境,这些困境,是由于数据在不同世界中的表现形式不同而造成的. 数据在页面上是一个扁平的,不带数据类 ...
- 关于使用spring mvc前后端上传数据日期格式
前端页面传入数据到后台,String,int等等类型都很友好,但是Date类型不能直接上传到服务器.否则会报异常 统一的异常处理机制 参数验证机制 Cors跨域请求机制 鉴权机制 一:统一响应结 ...
- 七个开源的 Spring Boot 前后端分离项目,一定要收藏!
前后端分离已经在慢慢走进各公司的技术栈,根据松哥了解到的消息,不少公司都已经切换到这个技术栈上面了.即使贵司目前没有切换到这个技术栈上面,松哥也非常建议大家学习一下前后端分离开发,以免在公司干了两三年 ...
- Spring Cloud 前后端分离后引起的跨域访问解决方案
背景 Spring Cloud 微服务试点改造,目前在尝试前后端分离. 前台A应用(本机8080端口),通过网管(本机8769端口)调用后台应用B(本机8082端口).应用C发布的http服务.. A ...
- Aspnet Mvc 前后端分离项目手记(三)关于restful 风格Url设计
RESTful 不是新东西,简单理解它的核心思想就是最大程度的利用http协议的一些特点,比如uri,比如请求动词,在前后端分离的项目中会有大大的好处 ,好的设计的url简单明了,胜过详细的说明文档. ...
随机推荐
- mysql水平分表和垂直分表的优缺点
表分割有两种方式: 1.水平分割:根据一列或多列数据的值把数据行放到两个独立的表中. 水平分割通常在下面的情况下使用. •表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数 ...
- OC——关于KVO
我们知道在WPF.Silverlight中都有一种双向绑定机制,如果数据模型修改了之后会立即反映到UI视图上,类似的还有如今比较流行的基于MVVM设计模式的前端框架,例如Knockout.js.其实在 ...
- 彻底弄懂AngularJS中的transclusion
点击查看AngularJS系列目录 彻底弄懂AngularJS中的transclusion AngularJS中指令的重要性是不言而喻的,指令让我们可以创建自己的HTML标记,它将自定义元素变成了一个 ...
- vue练手小项目--眼镜在线试戴
最近看到了一个眼镜在线试戴小项目使用纯js手写的,本人刚学习vue.js没多久,便试试用vue做做看了,还没完善. 其中包括初始图片加载,使用keywords查找,父子组件之间传递信息,子组件之间传递 ...
- 51nod 2006 飞行员配对(二分图最大匹配) 裸匈牙利算法 求二分图最大匹配题
题目: 题目已经说了是最大二分匹配题, 查了一下最大二分匹配题有两种解法, 匈牙利算法和网络流. 看了一下觉得匈牙利算法更好理解, 然后我照着小红书模板打了一遍就过了. 匈牙利算法:先试着把没用过的左 ...
- JavaWeb(一)Servlet中乱码解决与转发和重定向的区别
前言 前面其实已经把Servlet中所有的内容都介绍完了,这篇讲补充一点乱码和重定向与转发之间的区别! 一.request请求参数出现乱码问题 1.1.get请求 1)乱码示例 get请求的参数是在u ...
- CN_Week1_Receptive_Field
0. The introduction: 1. An example: Models of "Receptive Fields". 2. An intuitive method o ...
- 通过npm写一个cli命令行工具
前言 如果你想写一个npm插件,如果你想通过命令行来简化自己的操作,如果你也是个懒惰的人,那么这篇文章值得一看. po主的上一篇文章介绍了定制自己的模版,但这样po主还是不满足啊,项目中我们频繁的需要 ...
- ubuntu中安装ftp服务器
1. 实验环境 ubuntu14.04 2.vsftpd介绍 vsftpd 是“very secure FTP daemon”的缩写,是一款在Linux发行版中最受推崇的FTP服务器程序,安全性是它的 ...
- python之decode、encode及codecs模块
一.先说说编解码问题 编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码. Eg: str ...