spring MVC通过json与前台交互

这里用的是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

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3 xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
 4 xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5 xsi:schemaLocation="http://www.springframework.org/schema/beans
 6 http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
 7 http://www.springframework.org/schema/context
 8 http://www.springframework.org/schema/context/spring-context.xsd
 9 http://www.springframework.org/schema/mvc
10 http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
11
12 <!-- 启用注解 -->
13 <mvc:annotation-driven />
14
15 <!-- 配置默认首页 -->
16 <mvc:view-controller path="/" view-name="index"/>
17
18 <!-- 处理对静态资源的访问请求 -->
19 <mvc:resources location="/WEB-INF/static/js/" mapping="/js/**"/>
20
21 <!-- 扫描controller注解 -->
22 <context:component-scan base-package="com.controller" />
23
24 <!-- 解析视图 -->
25 <bean
26 class="org.springframework.web.servlet.view.InternalResourceViewResolver">
27 <property name="viewClass"
28 value="org.springframework.web.servlet.view.JstlView" />
29 <property name="prefix" value="/WEB-INF/jsps/" />
30 <property name="suffix" value=".jsp" />
31 </bean>
32
33 </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

 1 $(document).ready(
 2 function() {
 3 //当页面载入完成后,通过$.post方法从后台获取到list数据,并将它们插入到表格中
 4 //data是后台返回的json字符串,statusText为error或者success
 5 $.post("user/list", function(data, statusText) {
 6
 7 for (var i = 0; i < data.length; i++) {
 8 var temp = "<tr>";
 9 temp += "<td>" + data[i].id + "</td><td>"
10 + data[i].username + "</td><td>"
11 + data[i].password + "</td><td>"
12 + data[i].address + "</td>";
13 $(‘#tab‘).append(temp + "</tr>");
14 }
15
16 }, "json");
17 });

后台controller对应的方法

 1 @Controller
 2 @RequestMapping("/user")
 3 public class JsonController
 4 {
 5 @RequestMapping("/list")
 6 public String getAllUser(Model model)
 7 {
 8 return "list";
 9 }
10
11 @RequestMapping(value = "/list", method = RequestMethod.POST)
12 @ResponseBody
13 public String userListJson(Model model)
14 {
15 Gson gson = new Gson();
16 String str = gson.toJson(createUserList(5));
17 return str;
18 }
19 //创建5个用户
20 private List<User> createUserList(Integer count)
21 {
22 List<User> result = new ArrayList<User>();
23 for (int i = 1; i <= count; i++)
24 {
25 User user = new User();
26 user.setId(i);
27 user.setUsername("user" + i);
28 user.setPassword("admin" + i);
29 user.setAddress(i + "地区");
30 result.add(user);
31 }
32 return result;
33 }
34 }

这样,每当我们进入页面后,前台都会通过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");
});

再看一下后台的代码

1 @RequestMapping(value = "/add", method = RequestMethod.POST)
2 @ResponseBody
3 public String getJsonMsg(@RequestBody User user)
4 {
5 System.out.println(user.getId() + "|" + user.getUsername() + "|"
6 + user.getPassword() + "|" + user.getAddress());
7 return new Gson().toJson(user);
8 }

是不是很简单?因为springMVC可以帮我们自动将json字符串封装成User对象,只需要一个@RequestBody注解。再提醒一下,由于这里的自动转换会调用jackson的jar包,所以记得事先导入jackson的jar包(我就是之前一直忘记导入jar包然后搞了一下午的。。。)。

最后附上代码:访问地址为:localhost:8080/JsonDemo/

默认有两个链接

以上。

时间: 2024-11-06 23:48:41

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

spring mvc返回json字符串的方式

spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json            优点:不需要自己再处理 步骤一:在spring-servlet.xml文件中配置如下代码 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans&quo

Spring MVC 通过ajax实现前后台交互

先看前台ajax部分: 1 $('#delMd').click( 2 function(){ 3 if($('#reqState').val() == '2'){ 4 $.Dialog.show("申请单已提交审批,不能再更改"); 5 return false; 6 } 7 if($("#itemNo").val() == '0'){ 8 $.Dialog.show("请选择要删除的主数据"); 9 return false; 10 } 11

Spring MVC 的json问题(406 Not Acceptable)

原因 : 就是程序转换JSON失败. 在pom.xml 加上 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.2</version> </dependency> spring mvc 转化JSON 它所使用的json转换器是http:

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

1.spring mvc返回json数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable 2. @RequestMapping(value = { "/actor_details" }, method = { RequestMethod.POST }) @ResponseBody public ResultObject actorDetails(@RequestBody ActorDetailsRequest req)

关于 Spring MVC 返回 json 字符串

Spring MVC 返回 json 字符串的几种方式: 1.通过 @ResponseBody 注解自动将返回对象转为 json,这种方法需要 jackson-core.jar 等相关 jar 包支持,项目如果通过 maven 管理,直接在 maven 中加入依赖: ,这样在 maven 依赖中会新增完整的三个 jar 包: 2.在 spring-MVC 配置文件中进行默认视图配置: 3.借助其他 json 工具进行转换:比如可以使用 gson 来完成转换,当然这种方式也得需要 gson 的相关

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

原文:http://iwantmoon.com/Post/f94e49caf9b6455db7158474bab4c4dd 因为工作需要,现在要去做开放平台,考虑了多种方案之后,基本确定 下来,Http Api and Web Serivce两种,REST API 就需要通过Spring Mvc输出Json,这里面其实还是有一些工作可以做的,比如大量用户访问的情况下,怎保证性能.保证流量和稳定性.当然本篇我们还是主要讨论如何去实现它. 接下来,大家跟着我做吧. 首先,我们要了解Spring Mv

Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点

Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点的 json 报文 问题 问题描述起来比较拗口,其实就是用Spring MVC时,如何将对象映射成 json 报文时不把对象作为json的根节点.即使用@ResponseBody的效果. 比如,默认情况下,使用ModelAndView的addObject(key,object)或者ModelMap的addAttribute(key,object)保存完Java对象,然后交给Srping的视图解析器解析成json时,

Spring MVC 的json问题解决(406 Not Acceptable)

spring 版本:spring-framework-3.2.12.RELEASE 需要额外jar包:jackson-mapper-asl-1.9.7.jar和jackson-core-asl-1.9.7.jar spring-servlet.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/be

spring mvc接收JSON格式的参数

1.配置spring解析json的库   <dependency>         <groupId>org.codehaus.jackson</groupId>         <artifactId>jackson-mapper-asl</artifactId>         <version>1.9.8</version>         <type>jar</type>         &