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从前端读取后端数据的具体方法。

(0)

相关推荐

  • Spring MVC前后端的数据传输的实现方法

    本篇文章主要介绍了Spring MVC中如何在前后端传输数据.具体内容如下所示: 后端--> 前端 在Spring MVC中这主要通过Model将数据从后端传送到前端,一般的写法为: @RequestMapping(value = "/index", method = RequestMethod.POST) public String index(Model model){ String greeting = "Hello !" model.addAttrib

  • 基于Spring Security前后端分离的权限控制系统问题

    目录 1. 引入maven依赖 2. 建表并生成相应的实体类 3. 自定义UserDetails 4. 自定义各种Handler 5. Token处理 6. 访问控制 7. 配置WebSecurity 8. 看效果 9. 补充:手机号+短信验证码登录 前后端分离的项目,前端有菜单(menu),后端有API(backendApi),一个menu对应的页面有N个API接口来支持,本文介绍如何基于Spring Security前后端分离的权限控制系统问题. 话不多说,入正题.一个简单的权限控制系统需要

  • Layui数据表格 前后端json数据接收的方法

    先上效果图: 前端数据表格: <div class="x-body"> <%-- 数据表格 --%> <table class="layui-table" lay-data="{ id:'test', url:'/menu/page', page:true, limits: [10,20,50], //每页条数的选择项,默认:[10,20,30,40,50,60,70,80,90] limit: 10, //每页默认显示的数量

  • Vue前后端不同端口的实现方法

    前端Vue 8080端口,后端Node.js 8085端口 主要记录下前后端不同端口遇到的问题 1.写服务器端程序,我的在(node_proxy/index.js)下 app.all('*', function (req, res, next) { res.header('Access-Control-Allow-Origin', req.headers.origin || '*'); res.header('Access-Control-Allow-Headers', 'Content-Typ

  • nginx前后端同域名配置的方法实现

    本文主要介绍了nginx前后端同域名配置的方法实现,分享给大家,具体如下: upstream dfct { # ip_hash; server 121.41.19.236:8192; } server { server_name ct.aeert.com; location / { root /opt/web; try_files $uri $uri/ /index.html; error_page 405 =200 http://$host$request_uri; } location ^~

  • spring boot前后端传参的实现

    获取传参 @PathVariable注解主要用来获取URL参数.即这种风格的 URL:http://localhost:8080/user/{id} @GetMapping("/user/{id}") public String testPathVariable(@PathVariable Integer id) { System.out.println("获取到的id为:" + id); return "success"; } 对于多个参数的获

  • SpringBoot+Vue 前后端合并部署的配置方法

    前后端分离开发项目 前端vue项目 服务端springboot项目 如何将vue的静态资源整合到springboot项目里,通过启动jar包的方式部署服务. 前端项目执行npm run build命令进行打包,会自动生成打包后的dist目录文件所有东西放置在Resources/static文件下,如下图 此处index.html文件的资源路径(需要在前端打包配置中进行配置)应该如下图: 对应的springboot:application.yml需添加: server: port: 8080 to

  • SpringBoot集成WebSocket实现前后端消息互传的方法

    什么是WebSocket? WebSocket 协议是基于 TCP 的一种新的网络协议.它实现了浏览器与服务器全双工 (full-duplex) 通信-允许服务器主动发送信息给客户端. 为什么需要WebSocket? 大家都知道以前客户端想知道服务端的处理进度,要不停地使用 Ajax 进行轮询,让浏览器隔个几秒就向服务器发一次请求,这对服务器压力较大.另外一种轮询就是采用 long poll 的方式,这就跟打电话差不多,没收到消息就一直不挂电话,也就是说,客户端发起连接后,如果没消息,就一直不返

  • Spring MVC中使用Google kaptcha验证码的方法详解

    前言 众所周知验证码是抵抗批量操作和恶意登录最有效的方式之一,我们在每天或许都会遇到,验证码从产生到现在已经衍生出了很多分支.方式.google kaptcha 是一个非常实用的验证码生成类库. 通过灵活的配置生成各种样式的验证码,并将生成的验证码字符串放到 HttpSession 中,方便获取进行比较. 本文描述在 spring mvc 下快速的将 google kaptcha 集成到项目中(单独使用的话在 web.xml 中配置 KaptchaServlet).下面话不多说了,来一起看看详细

  • 使用Spring MVC拦截器实现日志记录的方法

    最近在研究Spring MVC拦截器,那么今天也算个学习笔记吧!有需要了解使用Spring MVC拦截器实现日志记录的朋友可参考.希望此文章对各位有所帮助. 1.  定义一个类实现HandlerInterceptor,比如: public class MyInterceptors implements HandlerInterceptor{ /** * 在渲染视图之后被调用: * 可以用来释放资源 */ public void afterCompletion(HttpServletRequest

随机推荐