本篇文章主要介绍了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. Linux文件管理_1

    在Linux中,全部都是文件,所以文件管理在Linux上格外重要,在我们学习文件管理前,我们先学习几个关于文件的命令,之后才能更好的学习文件管理. 目录 pwd命令 cd命令 列出文件内容ls 查看文 ...

  2. birt-j脚本调试 & 动态sql的实现

    一个比较好的birt问题解决网址: http://www.myexception.cn/h/1335919.html 1,Birt的JavaScript脚本简单调试 Birt中的js脚本不能用aler ...

  3. Hibernate中cascade属性的区别

    xml对于集合的级联操作属性cascade的取值可以是: none: 不级联操作,默认为none save-update:针对的是当对当前对象进行save或update操作时,要对想关联的对象进行sa ...

  4. Java Annotation注解继承说明

    有关Annotation的继承说明: 1.JDK文档中的说明是:只有在类上应用的Annotation才能被继承,而实际应用时的结果是:除了类上应用的Annotation能被继承外,没有被重写的方法的A ...

  5. Spring @RequestParam乱码问题

    在网上找了很多资料才找到解决的方法,通过URL传递命名参数,后台接收的却是乱码解决方法如下: 方法一:将接收的参数重新编码 @RequestMapping(value="/handle&qu ...

  6. readfile & file_get_contents异同

    记录一下:应用memcache时,准备把整个文件缓存到内存中,遇到了比较奇怪的事情,因为最初使用readfile来读取文件,结果这个函数返回一个字节数,而不是一个字符串,于是文件没办法再输出,最后使用 ...

  7. GCD之死锁

    GCD相当好用,但用不好就会死锁,始终要记着这样一句秘籍: 不要在串行队列放dispatch_sync.dispatch_apply 下面看几个例子 1 2 3 4 5 6 7 8 9 10 11 1 ...

  8. 【Java】关于Java8 parallelStream并发安全的思考

    背景 Java8的stream接口极大地减少了for循环写法的复杂性,stream提供了map/reduce/collect等一系列聚合接口,还支持并发操作:parallelStream. 在爬虫开发 ...

  9. C#设计模式之五创建者模式(Builder)【创建型】

    一.引言  今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一个复杂的物品,它主要是由CPU.主板.硬 ...

  10. hadoop 基本命令

    hdfs相关 1.查看HDFS文件目录 hadoop fs -ls / mapreduce相关 1.查看mapred job mapred job -list hadoop job -list Use ...