`
schy_hqh
  • 浏览: 558038 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

springMVC_04 Ajax请求 @RequestBody,@ResponseBody 处理JSON格式

 
阅读更多

springMVC处理Ajax请求,返回JSON格式数据

加入对jackson的依赖,springMVC使用jackson进行JSON数据转换

		<!-- json -->
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-core-asl</artifactId>
			<version>1.9.10</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.10</version>
		</dependency>

 

Controller

package com.gc.springmvc.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.gc.springmvc.model.User;

@Controller
public class AjaxController {
	
	@RequestMapping(value="listUser")
	public @ResponseBody List<User> listUser() throws Exception {
		List<User> users = new ArrayList<User>();
		users.add(new User("张三2", "zs"));
		users.add(new User("李四", "ls"));
		return users;
	}
	
}

 

页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div>
		<div>
			<a href="javascript:void(0)" onclick="sendAjaxReq()">Ajax请求,返回JSON数据</a>
		</div>
		<div id="users" style="margin-left:50%;font-weight:bold;color:red"></div>
	</div>
	
	<!-- Ajax -->
	<script type="text/javascript">
		function createAjaxObj() {
			var req;
			if (window.XMLHttpRequest) {
				req = new XMLHttpRequest();
			} else {
				req = new ActiveXObject("Msxml2.XMLHTTP"); //ie
			}
			return req;
		}

		function sendAjaxReq() {
			var req = createAjaxObj();
			req.open("get", "listUser?name=王五&time="+Math.random());
			req.setRequestHeader("accept", "application/json");
			req.onreadystatechange = function() {
				if(req.readyState=4 && req.status==200) {
					var result = eval("(" + req.responseText +")");
					var divNode = document.getElementById("users");
					divNode.innerHTML = "";
					for(var index in result) {
						var name = result[index].name;
						if(index>0) {
							name = "<br/>" + name;
						}
						divNode.innerHTML += name;
					}
				}
			}
			req.send(null);
		}
	</script>
</body>
</html>

 

 

JSP页面中访问服务器上的静态资源,如js脚本文件

必须配置resource资源,否则按请求一个Controller进行映射处理,导致无法下载

 

    <!-- 配置对静态资源文件的访问不被拦截,如js脚本-->
    <mvc:resources location="/script/" mapping="/script/**"/>
 

 

配置文件中只需要加入如下配置,即可开启一系列功能:
<mvc:annotation-driven/>
如果类路径下有jackson相关jar包,springMVC将自动注册JSON转换服务!
HttpMessageConverter support for @RequestBody method parameters and @ResponseBody method return values from @RequestMapping or @ExceptionHandler methods.
    This is the complete list of HttpMessageConverters set up by mvc:annotation-driven:
        ByteArrayHttpMessageConverter converts byte arrays.
        StringHttpMessageConverter converts strings.
        ResourceHttpMessageConverter converts to/from org.springframework.core.io.Resource for all media types.
        SourceHttpMessageConverter converts to/from a javax.xml.transform.Source.
        FormHttpMessageConverter converts form data to/from a MultiValueMap<String, String>.
        Jaxb2RootElementHttpMessageConverter converts Java objects to/from XML — added if JAXB2 is present on the classpath.
        MappingJackson2HttpMessageConverter (or MappingJacksonHttpMessageConverter) converts to/from JSON — added if Jackson 2 (or Jackson) is present on the classpath.
        AtomFeedHttpMessageConverter converts Atom feeds — added if Rome is present on the classpath.
        RssChannelHttpMessageConverter converts RSS feeds — added if Rome is present on the classpath.

 

 

@RequestBody

       客户端将JSON数据发送到服务端,服务端将JSON转换为对象传入
      
@Controller
@RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {
    // implementation omitted
}
 

 

@ResponseBody

服务端将对象转为JSON传递到浏览器,因此,多用于get方式请求JSON数据

@Controller
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public Pet getPet(@PathVariable String petId, Model model) {
    // implementation omitted
}

 

 

示例:

客户端发起Ajax请求,Post方式,将JSON数据发送到服务端

服务端通过@RequestBody将JSON数据转换为对象

服务端再通过@ResponseBody将对象转换为JSON数据返回给客户端

 

Controller控制器

package com.gc.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.gc.springmvc.model.User;

@Controller
public class AjaxController {
	
	/**
	 * 接收客户端发送的JSON数据,并将其转换为对象
	 * @RequestBody 
	 * 其一,从http请求报文的请求体中获取JSON数据,则说明必须是POST请求
	 * 其二,Body中为JSON,则最可能为Ajax请求,通过form进行post请求好像办不到呢
	 */
	@RequestMapping(value="jsonPost", method=RequestMethod.POST, consumes="application/json")
	@ResponseBody
	public User jsonPost(@RequestBody User user) {
		System.out.println("ajax json post");
		System.out.println(user.getName());
		System.out.println(user.getPassword());
		user.setName("李四");
		user.setPassword("100");
		return user;
	}
}

 

JSP页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div>
		<fieldset>
			<table>
				<tbody>
					<tr>
						<td>name</td>
						<td><input id="name" type=text value="张三"/></td>
					</tr>
					<tr>
						<td>password</td>
						<td><input id="password" type=password value="123"/></td>
					</tr>
					<tr>
						<td><button id="post">ajax:POST</button></td>
					</tr>
				</tbody>			
			</table>
		</fieldset>
	</div>
	<script type="text/javascript" src="script/jquery-1.9.1.js"></script>
	<script type="text/javascript">
		$(document).ready(function(){
			$("#post").click(function(){
				ajaxPOST();
			});
		});
		
		function ajaxPOST() {
			var user = {};
			user.name = $("#name").val();
			user.password = $("#password").val();
			var jsonStr = JSON.stringify(user);
			//var json2Object = JSON.parse(jsonStr);
			$.ajax({
				type : "post",
				contentType : "application/json;charset=UTF-8",
				url : "jsonPost",
				dataType : "json",
				processData : false,
				data : jsonStr,
				success : function(msg) {
					//javascript已自动将返回的json数据转为对象了
					alert("success:"+msg.name+"---"+msg.password);
				},
				error : function() {
					alert("try again!");
				}
			});
		}
		
	</script>
</body>
</html>

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    快速解决SpringMVC @RequestBody 用map接收请求参数的问题

    快速解决SpringMVC @RequestBody 用map接收请求参数的问题 在 SpringMVC 中,使用 @RequestBody 注解可以将请求体中的数据转换为 Java 对象,但是在使用 map 接收请求参数时,经常会遇到一些问题。本文将讨论如何...

    springMVC+json.zip_JSON_myeclipse_springmvc_数据传递

    这里,`User`是自定义的Java对象,`@RequestBody`将JSON数据转换为`User`对象,`@ResponseBody`将处理结果转换为JSON返回。 7. **调试和测试**:在MyEclipse中,你可以使用内置的Tomcat服务器运行项目,通过...

    springMVC+ajax+json

    然后,使用@RequestBody或@ResponseBody注解将HTTP请求体或响应体绑定到JSON对象。 例如,一个简单的Ajax请求可能如下: ```javascript $.ajax({ url: '/api/data', type: 'GET', dataType: 'json', success: ...

    Springmvc 4.x利用@ResponseBody返回Json数据的方法

    @ResponseBody注解的功能与@RequestMapping中的consumes属性和@RequestBody注解刚好相反。@RequestBody注解用于方法的参数,表示HTTP请求体中的内容需要被转换成相应的Java对象。而@ResponseBody则用于方法的返回值...

    springmvc实现json交互-requestBody和responseBody

    本文将深入探讨如何使用`@RequestBody`和`@ResponseBody`注解来实现JSON的处理。 首先,JSON作为一种轻量级的数据交换格式,其简单性和易于解析的特性使得它在接口调用和HTML页面中被广泛使用。例如,在Web服务接口...

    springMVC json格式转换demo

    3. 使用`@RequestBody`和`@ResponseBody`注解处理JSON数据的转换。 4. 在前端使用合适的API发送JSON请求。 5. 编写测试用例验证JSON转换功能的正确性。 通过理解和实践这个示例,开发者可以掌握在Spring MVC中处理...

    SpringMVC(八)处理AJAX请求

    在Spring MVC中,可以使用`@RequestBody`和`@ResponseBody`注解分别用于解析请求参数和序列化响应数据。例如,上面的例子中,`AjaxRequest`是请求参数对象,`AjaxResponse`是响应数据对象。 4. **处理异步响应** ...

    SpringMVC与Ajax交互需要的三个包

    - **Controller处理**:在SpringMVC的Controller方法中,使用`@RequestBody`和`@ResponseBody`注解接收和返回JSON数据。`@RequestBody`用于将请求体中的JSON转换为Java对象,而`@ResponseBody`则告诉Spring将方法的...

    使用springmvc整合ajax请求demo代码示例

    这里的`@RequestBody`和`@ResponseBody`注解分别用于将HTTP请求体转换为方法参数和将方法返回值转化为HTTP响应体。 2. **定义Ajax请求**:在前端,使用JavaScript或jQuery库来发送Ajax请求。jQuery简化了Ajax操作,...

    json数据交互.txt

    而后端则通过`@RequestBody`注解来绑定请求体中的JSON数据到Java对象,并使用`@ResponseBody`注解将返回的数据转换为JSON格式响应给客户端。这种方式简化了前后端之间的数据交互过程,提高了开发效率。

    解决SpringMVC接收不到ajaxPOST参数的问题

    在SpringMVC中,如果使用@RequestBody注解接收参数时,需要将contentType设置为"application/json;charset=utf-8",否则将无法接收到参数值。例如: ```java @PostMapping("/method2") @ResponseBody @...

    SpringMVC中使用JSON传递数据时用的jar包

    在Spring MVC框架中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,它被广泛用于前后端交互,尤其是在Ajax请求中。JSON因其简洁、易读的特性,成为了现代Web开发中的首选数据格式。本篇文章将深入...

    SpringMVC中Json数据格式转换

    在SpringMVC中,JSON数据格式转换主要涉及到两个注解:@RequestBody和@ResponseBody。 @RequestBody注解用于读取HTTP请求的内容(字符串),然后通过SpringMVC提供的HttpMessageConverter接口将读到的内容转换为...

    Springmvc处理ajax请求并返回json数据

    总结一下,Spring MVC通过`@RequestMapping`、`@ResponseBody`和`@RequestBody`注解,提供了处理AJAX请求和返回JSON数据的强大功能。这使得我们可以轻松地构建前后端分离的应用,实现高效的页面异步更新。在实际开发...

    SpringMVC Controller解析ajax参数过程详解

    在Controller中,我们使用了`@RequestBody`注解来将ajax请求的JSON数据直接封装到User对象中。这里,我们使用了`User`类来存储用户名和用户密码两个属性。在Controller方法中,我们可以直接使用`user.getUser_name()...

    springMVC整合json

    在这里,`@RequestBody`注解用于将JSON请求体映射到方法参数,而`@ResponseBody`注解则表明方法的返回值应转换为JSON并返回给客户端。 **6. 测试与调试** 创建的SpringMVC应用可以通过发送HTTP请求来测试JSON接口。...

    SpringMVC:整合JQUERY与JSON

    - **数据序列化与反序列化**:SpringMVC使用`@RequestBody`和`@ResponseBody`注解将JSON数据自动转换为Java对象,反之亦然。 - **响应处理**:jQuery接收服务器返回的JSON数据,通过回调函数处理结果,更新页面...

    SpringMVC 开发接口实例+json参数传递

    在这个例子中,`@RequestBody`注解用于将接收到的JSON请求体映射到`RequestObject`对象,而`@ResponseBody`则表示Controller方法的返回值将直接转换为HTTP响应的主体。 五、定义请求和响应模型 为了处理JSON数据,...

    SpringMVC框架中传递JSON数据时前台报406错误解决办法

    public MyResponse myEndpoint(@RequestBody MyRequest request) { // 处理逻辑... return new MyResponse(); } ``` 在这个例子中,`@ResponseBody`注解告诉Spring MVC将方法返回的对象转换为JSON,`produces = ...

    Spring MVC与Ajax交互源码

    在这个例子中,`@RequestBody`用于将前端发送的JSON数据转换为User对象,`@ResponseBody`则表示Controller方法的返回值将直接写入HTTP响应体,可以被前端的Ajax请求接收。 在前端,我们可以使用jQuery的ajax方法来...

Global site tag (gtag.js) - Google Analytics