这里用的是spring4.1.4,jquery2.1.3,其它环境为:myeclipse2014,tomcat7,jdk7

首先,新建一个web工程,并导入springMVC的jar包(为了方便起见我直接将spring的所有jar包全导了进来),另外,我们接下来要通过@RequestBody去获取前台传递过来的json,所以我们还需要导入jackson的jar包(spring默认使用jackson处理json),
jar包导入完成后,建立整个工程的目录结构
首先看一下springMVC的配置文件springMVC-servlet.xml
 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> <!-- 启用注解 -->
<mvc:annotation-driven /> <!-- 配置默认首页 -->
<mvc:view-controller path="/" view-name="index"/> <!-- 处理对静态资源的访问请求 -->
<mvc:resources location="/WEB-INF/static/js/" mapping="/js/**"/> <!-- 扫描controller注解 -->
<context:component-scan base-package="com.controller" /> <!-- 解析视图 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsps/" />
<property name="suffix" value=".jsp" />
</bean> </beans>
然后是web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>JsonDemo</display-name> <servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:springMVC-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
看一下实体类:
public class User
{
private Integer id;
private String username;
private String password;
private String address; //getter and setter
}
基本配置完成后,我们先在前台通过$.post方法从后台获取list并将list中的数据插入到表格中
<table id="tab">
<tr>
<th>Id</th>
<th>username</th>
<th>password</th>
<th>address</th>
</tr>
</table>
js
 $(document).ready(
function() {
//当页面载入完成后,通过$.post方法从后台获取到list数据,并将它们插入到表格中
//data是后台返回的json字符串,statusText为error或者success
$.post("user/list", function(data, statusText) { for (var i = 0; i < data.length; i++) {
var temp = "<tr>";
temp += "<td>" + data[i].id + "</td><td>"
+ data[i].username + "</td><td>"
+ data[i].password + "</td><td>"
+ data[i].address + "</td>";
$('#tab').append(temp + "</tr>");
} }, "json");
});
后台controller对应的方法
 @Controller
@RequestMapping("/user")
public class JsonController
{
@RequestMapping("/list")
public String getAllUser(Model model)
{
return "list";
} @RequestMapping(value = "/list", method = RequestMethod.POST)
@ResponseBody
public String userListJson(Model model)
{
Gson gson = new Gson();
String str = gson.toJson(createUserList(5));
return str;
}
//创建5个用户
private List<User> createUserList(Integer count)
{
List<User> result = new ArrayList<User>();
for (int i = 1; i <= count; i++)
{
User user = new User();
user.setId(i);
user.setUsername("user" + i);
user.setPassword("admin" + i);
user.setAddress(i + "地区");
result.add(user);
}
return result;
}
}
这样,每当我们进入页面后,前台都会通过ajax自动从后台获取数据并插入到table中
 
接下来看下后台如何接收前台传递的json数据
将之前的页面改造如下
<form id="test">
<table>
<tr>
<th>Id</th>
<td><input type="text" name="id"></td>
</tr>
<tr>
<th>username</th>
<td><input type="text" name="username"></td>
</tr>
<tr>
<th>password</th>
<td><input type="text" name="password"></td>
</tr>
<tr>
<th>address</th>
<td><select name="address">
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
<option value="guangzhou">广州</option>
</select></td>
</tr>
</table>
</form>
<button id="btn1">添加</button>
<table id="tab">
<tr>
<th>Id</th>
<th>username</th>
<th>password</th>
<th>address</th>
</tr>
</table>
添加一个表单用于输入user数据,然后点击添加按钮,user数据会被封装成json字符串传递给后台,后台获取json字符串后将字符串解析成user对象然后再转换成json字符串返回给前台!听起来是不是很麻烦?其实springMVC都基本帮我们实现好了。
看一下js
                //当用户点击id为btn1的按钮时,通过serializeArray()方法获取到表单中的数据,然后通过$.each将
//这些数据封装成json对象,最后使用JSON.stringify()方法将json对象转换成json字符串并发送给后台
$('#btn1').click(
function() {
var str = $('#test').serializeArray();
var sendData = {};
$.each(str, function() {
if (this.value == null) {
sendData[this.name] = '';
} else {
sendData[this.name] = this.value;
} });
$.ajaxSetup({
contentType : 'application/json'
});
//同上
$.post("user/add", JSON.stringify(sendData),
function(data, statusText) {
var temp = "<tr>";
temp += "<td>" + data.id + "</td><td>"
+ data.username + "</td><td>"
+ data.password + "</td><td>"
+ data.address + "</td>";
$('#tab').append(temp + "</tr>"); }, "json");
});
再看一下后台的代码
 @RequestMapping(value = "/add", method = RequestMethod.POST)
@ResponseBody
public String getJsonMsg(@RequestBody User user)
{
System.out.println(user.getId() + "|" + user.getUsername() + "|"
+ user.getPassword() + "|" + user.getAddress());
return new Gson().toJson(user);
}
是不是很简单?因为springMVC可以帮我们自动将json字符串封装成User对象,只需要一个@RequestBody注解。再提醒一下,由于这里的自动转换会调用jackson的jar包,所以记得事先导入jackson的jar包(我就是之前一直忘记导入jar包然后搞了一下午的。。。)。
最后附上代码:访问地址为:localhost:8080/JsonDemo/
默认有两个链接
以上。

spring MVC通过json与前台交互的更多相关文章

  1. spring mvc返回json字符串的方式

    spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json            优点:不需要自己再处理 步骤一:在spring- ...

  2. spring mvc返回json字符串数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable

    1.spring mvc返回json数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable 2. @RequestMapping(val ...

  3. Spring Mvc 输出Json(iwantmoon.com出品)

    原文:http://iwantmoon.com/Post/f94e49caf9b6455db7158474bab4c4dd 因为工作需要,现在要去做开放平台,考虑了多种方案之后,基本确定 下来,Htt ...

  4. Spring MVC 的json问题(406 Not Acceptable)

    原因 : 就是程序转换JSON失败. 在pom.xml 加上 <dependency> <groupId>com.fasterxml.jackson.core</grou ...

  5. ajax使用向Spring MVC发送JSON数据出现 org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported错误

    ajax使用向Spring MVC发送JSON数据时,后端Controller在接受JSON数据时报org.springframework.web.HttpMediaTypeNotSupportedE ...

  6. Spring MVC之JSON数据交互和RESTful的支持

    1.JSON概述 1.1 什么是JSON JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式.它是基于JavaScript的一个子集,使用了C.C ...

  7. Spring MVC与html页面的交互(以传递json数据为例)

    一.导入相jar包 主要包括spring相关jar包和fastjson jar包,具体步骤略. 二.配置相关文件 1.配置web.xml文件 <?xml version="1.0&qu ...

  8. Spring MVC 接收Json格式参数

    今天做了一个关于表格排序的功能,可以通过右边的箭头做排序操作,每次操作需要通过Ajax将每条记录的Id数组作为参数去发送请求, 后台Spring MVC接到参数后作更改序号操作. 前端页面发送请求的代 ...

  9. Spring MVC返回json数据给Android端

    原先做Android项目时,服务端接口一直是别人写的,自己拿来调用一下,但下个项目,接口也要自己搞定了,我想用Spring MVC框架来提供接口,这两天便抽空浅学了一下该框架以及该框架如何返回json ...

随机推荐

  1. dict.get('key')和dict['key']的区别

    dict['key']只能获取存在的值,如果不存在会触发KeyError dict.get('key', default=None)如果不存在,返回一个默认值

  2. Python Challenge 过关心得(0)

    最近开始用Openerp进行开发,在python语言本身上并没有什么太大的进展,于是决定利用空闲时间做一点python练习. 最终找到了这款叫做Python Challenge(http://www. ...

  3. win7系统怎样备份

    利用系统自带的备份还原 1 这种方法的缺点是如果以后系统出现问题,无法进入系统的话,就无法恢复系统了.首先我们点击开始菜单,打开控制面板! 2 在控制面板中点击系统和安全! 3 我们选择备份和还原中的 ...

  4. 简单Demo的用户登录JSP界面IE、Firefox(chrome) Enter 键提交表单

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. Android 指定纯色图标的颜色

        最近项目用到了系统图标,但是设计师设计的颜色却与系统图标不一样: 如果每张图片都要用Photoshop进行颜色填充势必增加了工作量,而且不灵活,占资源: 例如同一张图片,希望点击的时候改变颜色 ...

  6. H面试程序(12): 输出字符串中第一个只出现一次的字母

    题目描述: 若字符串str为'' sbdddsbfc'',则输出 f; 若字符串str为''aabbccdd'',则输出:字符串str中的字符都出现两次以上 #include <stdio.h& ...

  7. NSDictionary所有API的学习。

    <欢迎大家增加iOS开发学习交流群:QQ529560119> @property (readonly)NSUInteger count; //1.利用指定的key寻找相应的value - ...

  8. 移植busybox-1.21.1

    busybox官网:www.busybox.net 1.解压 # tar jxvf busybox-1.21.1.tar.bz2 2.配置 # cd busybox-1.21.1 # make men ...

  9. iOS 自我检測

    1.id 和 NSObject的差别? 2.UITableViewCell的复用原理? 3.UIView生命周期和UILayer的差别? 4.多线程NSOperation和Queue.GDC.Thre ...

  10. Android Java混淆(ProGuard)

    本文转载别人博客,转载请注明出处:http://www.blogjava.net/zh-weir/archive/2011/07/12/354190.html ProGuard简介 ProGuard是 ...