Spring MVC 前后台数据交互
本文是转载文章,感觉比较好,如有侵权,请联系本人,我将及时删除。
原文网址地址:《Spring MVC 前后台数据交互》
1、服务端数据到客户端
(1)返回页面,Controller中方法返回String,String对应的是view的位置,如果需要携带数据通过model(相当于一个Map)传递到view, view中使用jstl的EL表达式来绑定model带来的数据。
@RequestMapping(value="/getPojoView", method=RequestMethod.GET)
public String getPojoView(Model model){
Pojo pojo = new Pojo();
pojo.setPojoName("testName");
pojo.setPojoValue("testValue");
model.addAttribute(pojo);
return"sample/pojoView";
}
(2)返回Json对象,利用@ResponseBody来实现。
@RequestMapping(value="/getPojoJson", method=RequestMethod.GET)
public @ResponseBody Pojo getPojoJson(){
Pojo pojo = new Pojo();
pojo.setPojoName("testName");
pojo.setPojoValue("testValue");
return pojo;
}
注:spring mvc自动将java对象转化成了json对象传回了客户端,返回对象可以是Pojo也可以是List
(3)直接操作Response自己实现想要的效果。
@RequestMapping(value="/getCustomResponse", method=RequestMethod.GET)
public void getCustomResponse(HttpServletResponse response){
//操作response...
}
注:response为spring根据方法的type类型注入的
2、客户端数据到服务端
(1)通过URL传回参数:
<script type="text/javascript"src="jquery-1.4.min.js"></script>
<h1>button与链接效果一致</h1>
<a href="simple?name=text&age=28">simple</a><button onclick="simple()">simple</button><br/>
<script type="text/javascript">
function simple(){
$.getJSON("simple",{"name":"nameJsonTest","age":"100"},function(){});
}
</script>
<a href="list?names[]=aaaa&names[]=bbbb">list</a><button onclick="list()">list</button><br/>
<script type="text/javascript">
function list(){
$.getJSON("list",{"names":["name1","name2","name3"]},function(){});
}
</script>
<a href="pojo?pojo[pojoName]=hahaha&pojo[pojoValue]=kkkkkk">pojo</a><button onclick="pojo()">pojo</button><br/>
<script type="text/javascript">
function pojo(){
$.getJSON("pojo",{"pojo":{"pojoName":"testName","pojoValue":"testValue"}},function(){});
}
</script>
<a href="rest/10/2">rest</a><button onclick="rest()">rest</button><br/>
<script type="text/javascript">
function rest(){
var pageSize = 20;
var pageNo = 3;
$.getJSON("rest/"+pageSize+"/"+pageNo,{},function(){});
}
</script>
Controller:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; @Controller
@RequestMapping(value="/urlparam")
public class UrlParamController {
@RequestMapping(value="/", method=RequestMethod.GET)
public String index(){
return"urlparam/index";
} @RequestMapping(value="/simple", method=RequestMethod.GET)
public void simple(@RequestParam String name, @RequestParam Integer age){
System.out.println("name:"+name);
System.out.println("age:"+age);
} //list内不能放POJO对象
@RequestMapping(value="/list", method=RequestMethod.GET)
public void list(@RequestParam("names[]") String[] names){
//也可以用List<String> names来接收
for(String name : names){
System.out.println("name:"+name);
}
} //单URL目前还不支持POJO对象,只能支持键值对,希望spring以后有所改善
@RequestMapping(value="/pojo", method=RequestMethod.GET)
public void pojo(@RequestParam("pojo[pojoName]") String name, @RequestParam("pojo[pojoValue]") String value){
System.out.println("name:"+name);
System.out.println("value:"+value);
} @RequestMapping(value="/rest/{pageSize}/{pageNo}", method=RequestMethod.GET)
public void rest(@PathVariable Integer pageSize, @PathVariable Integer pageNo){
System.out.println("pageSize:"+pageSize);
System.out.println("pageNo:"+pageNo);
}
}
(2)通过POST表单传回参数:
方式同与url的是一致的,需要将method=RequestMethod.POST,不过有中文的话一般都用post来避免转码。一般ajax的时候用$.post而不能使用jQuery插件json的$.postJSON。下面会讲到。
通过使用jQuery插件json的$.postJSON传回参数:
$.postJSON返回的是:application/json,
$.post返回的是: application/x-www-form-urlencoded
spring会将postJSON传回的json字符串转换成对象再将对象丢给带有@RequestBody的形参。
由于json字符串直接转换为对象,所以@RequestBody只能接收一个对象还需要属性一一对应,不能多传参数。此方式可以传POJO,也可以传
List<POJO>。
$.postJSON('url', {"name":"testName","age":"28"},function(){});
@RequestMapping(value="pojo", method=RequestMethod.POST)
publicvoid sentPojo(@RequestBody Pojo pojo){
System.out.println(pojo.getPojoName());
System.out.println(pojo.getPojoValue());
}
注:目前对于一对象,附带几个简单参数的解决办法是将简单参数通过为REST的url路径参数来传送。
(3) 直接拿到Request来操作:
@RequestMapping(value="/", method=RequestMethod.GET)
public String withRequest(HttpServletRequest request){
//操作request...
return"someview";
}
以上controller内的方法的形参, 除了@RequestBody和@RequestParam不能同时声明外,都可以进行组合来满足各种需求。
小结:spring
mvc3充分利用了annotation的好处将参数传递过程中的转换全部变为了透明,这样省去了程序员对参数进行一些无聊的转换,这肯定能提高不少效
率。另一方面想说的是spring的@RequestBody还可以做的更好,如果能允许多个对象同时传送,那这个东西就十分好了。
Spring MVC 前后台数据交互的更多相关文章
- Phonegap开发的前后台数据交互
在用Phonegap开发时,需要进行前后台数据交互,在网上找资料,很多东西让人一头雾水,最后借鉴了下面的博客: http://blog.sina.com.cn/s/blog_681929ae01017 ...
- 用PHP和Ajax进行前后台数据交互——以用户登录为例
很多网站中都有用户登录系统,要完成用户的注册和登陆,就一定要用到前后台的数据交互.在这里以简单的用户注册和登陆为例介绍一下前后台交互的大致流程. 首先,我们来做一个简单的登陆界面. 这里为了方便我使用 ...
- Django学习笔记(8)——前后台数据交互实战(AJAX)
这里将自己这段时间学习的关于前后台数据交互的笔记写在这里,这里包含了Django传输数据给JS,AJAX的相关问题,跨域问题,如何解决AJAX的跨域问题等等.比较凌乱,请看到这篇博客的盆友见谅,如果我 ...
- 0060 Spring MVC的数据类型转换--ConversionService--局部PropertyEditor--全局WebBindingInitializer
浏览器向服务器提交的数据,多是字符串形式,而有些时候,浏览器需要Date.Integer等类型的数据,这时候就需要数据类型的转换器 使用Spring的ConversionService及转换器接口 下 ...
- 0061 Spring MVC的数据格式化--Formatter--FormatterRegistrar--@DateTimeFormat--@NumberFormat
Converter只完成了数据类型的转换,却不负责输入输出数据的格式化工作,日期时间.货币等虽都以字符串形式存在,却有不同的格式. Spring格式化框架要解决的问题是:从格式化的数据中获取真正的数据 ...
- vue仓库、组件间通信、前后台数据交互、前端储存数据大汇总
目录 路由重定向 仓库介绍 vuex插件:可以完成任意组件间信息交互(移动端) 前端存储数据大汇总 前后台交互方式(重点) 前后台数据交互 axios插件:完成前后台ajax交互的 同源策略 - 前后 ...
- Spring mvc 前后台通过json交互【转】
原文转自:https://www.cnblogs.com/zhaojiankai/p/8184596.html 本节内容: @RequestBody @ResponseBody 请求json,响应js ...
- easy-table-vue+VueJs、SpringBoot+Mybatis实现MVVM模型前后台数据交互
该项目分为前端展示部分和后台服务部分. 前端部分 使用的技术是:NodeJs.Webpack.VueJs 使用的组件库是:IVIEW.easy-table-vue 使用的开发工具是:WebStorm ...
- spring mvc 4数据校验 validator
注解式控制器的数据验证.类型转换及格式化——跟着开涛学SpringMVC http://jinnianshilongnian.iteye.com/blog/1733708Spring4新特性——集成B ...
随机推荐
- Java基础知识强化之IO流笔记04:throw和throws的区别
1. throw概述 在功能方法内部出现某种问题,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出. 2. 案例演示: (1) package com.himi.throwdemo; p ...
- 自定义控件(视图)2期笔记05:自定义控件之继承自View(滑动开关)
1. 开关按钮点击效果,如下: 2. 继承已有View实现自定义View 3. 下面通过一个案例实现滑动开关的案例: (1)新建一个新的Android工程,命名为" 开关按钮", ...
- 第四章:使用Proxy代理让客户端服务端分工合作。
<基于1.8 Forge的Minecraft mod制作经验分享> 别被那个Proxy代理吓到,很简单的. 我们先讨论为什么要用Proxy代理: 像打开新的UI这种操作,比如打开一个背包, ...
- 自定义绘制View
Paint(画笔) Canvas(画布) The Canvas class holds the "draw" calls. To draw s ...
- eclipse lint工具介绍
一.基本介绍 作为移动应用开发者,我们总希望发布的apk文件越小越好,不希望资源文件目录中没有用到的图片等资源也被打包进apk,不希望应用中使用了高于minSdk的api,也不希望AndroidMan ...
- LINQ Enumerable
System.Linq.Enumerable类,提供了数十种称为扩展方法的共享方法,帮助您操作所有实现IEnumerable(of T)接口的类中的数据.由于Enumerable类的扩展方法可以处理许 ...
- boostrap按钮
bootstrap按钮 对应链接:http://v3.bootcss.com/css/#buttons 使用时添加基础类class:btn 默认样式class=btn-default,控制大小clas ...
- effective C#之 - 使用属性代替成员变量
使用属性代替公共成员变量,一个很明显的好处是,很容易在一个地方对成员变量进行控制,例如: class Customer { private string name; public string Nam ...
- InstallShield Limited Edition for Visual Studio 2013
InstallShield Limited Edition for Visual Studio 2013 图文教程(教你如何打包.NET Framework进去)本文转自“吾乐吧软件站”,原文链接:h ...
- MySQL查询执行的基础
当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的.一旦理解这一点,很多查询优化实际上就是遵循一些原则让优化器能够按照预想的合理的方式运行. 换句话说,是 ...