`
sb33060418
  • 浏览: 152233 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring mvc(四)返回json

阅读更多
实现springmvc返回json内容。

1.指定视图类型
新增JsonController类,代码如下:
package com.sunbin.test.testSpring.web.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;

import com.sunbin.test.testSpring.service.TestService;
import org.springframework.stereotype.Controller;

@Controller
@RequestMapping(value = "/json")
public class JsonController {
	@Autowired
	public TestService testService;

	@RequestMapping(value = "/y", method = { RequestMethod.GET })
	public ModelAndView handleRequest(HttpServletRequest arg0,
			HttpServletResponse arg1) throws Exception {
		// TODO Auto-generated method stub
		ModelAndView view = new ModelAndView(new MappingJackson2JsonView());
		view.addObject("status", "y");
		view.addObject("info", "success");
		return view;
	}

}

类中指定了使用MappingJackson2JsonView视图,该视图会将view中的各个对象转换为json的属性返回,并指定响应ContentType为application/json;charset=UTF-8。
重新部署后,访问http://localhost:8080/testSpringWeb/json/y返回内容为:
{"status":"y","info":"success"}

2.配置默认ResponseBody转换器
如果项目中大量使用ajax请求和json格式,并考虑以后可能更改返回格式,就不需要在每个方法中去指定视图名称,直接配置默认的ResponseBody转换器即可。
在servlet-context.xml中配置如下:
<!-- @ResponseBody -->
<bean
	class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
	<property name="messageConverters">
		<list>
			<bean
				class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
		</list>
	</property>
</bean>

使用MappingJackson2HttpMessageConverter作为默认解析器。
JsonController中新增方法如下:
	@RequestMapping(value = "/n", method = { RequestMethod.GET })
	@ResponseBody
	public Map testJson(HttpServletRequest request, HttpServletResponse arg1)
			throws Exception {
		// TODO Auto-generated method stub
		Map map = new HashMap();
		map.put("status", "n");
		map.put("info", "failure");
		return map;
	}

控制器Controller只需返回业务模型Model提供的数据map即可,视图View会自动处理。
重新部署后,访问http://localhost:8080/testSpringWeb/json/n可以看到结果:
{"status":"n","info":"failure"}
个人感觉这种方式更适合mvc三层分离的设计。

3.引用静态资源
因在web.xml中配置了springmvc的servlet拦截/下所有请求,因此对静态资源的访问也会被springmvc拦截,不能直接访问。需要映射静态资源至某个地址。
在servlet-context.xml中配置如下:
<mvc:resources location="/resources/" mapping="/resources/**" />

该配置会将/resources/目录映射成/resources/**地址,因此对/resources/**的访问会直接进入web工程的/resources/目录下查找并返回。
添加jquery.js至/resources/js目录,访问http://localhost:8080/testSpringWeb/resources/js/jquery.js可看到js文件内容。

4.访问ajax+json
附带记录下html页面使用jquery库访问ajax并读取json数据。
在src\main\webapp目录下新建json.jsp,代码如下:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ page contentType="text/html ; charset=UTF-8"%>
<html>
	<head>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">  
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
		<script type="text/javascript" src ="resources/js/jquery.js"></script>
		<script>
			$(window).load(function(){
				$.ajax({
			        url: 'http://localhost:8080/testSpringWeb/json/y',
			        dataType: 'json'
			    }).done(function (result) {
			    	//TODO
			    	alert("done:"+result+":"+result.status);  
			    }).fail(function (result, textStatus, info) {
			    	//TODO
			    	alert("fail:"+result+":"+textStatus+":"+info);  
			    });
			})
		</script>
	</head>
	<body>
	</body>
</html>

访问后成功后进入done回调函数,弹出对话框提示:
done:[object Object]:y
出错则进入fail回调提示:
fail:[object Object]:error:Not Found

5.jsonp支持
如果web项目需要提供jsonp方式访问,springmvc也可以支持。
新建JsonpController类如下:
package com.sunbin.test.testSpring.web.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.http.converter.json.MappingJacksonValue;
import org.springframework.stereotype.Controller;

@Controller
public class JsonpController {

	@RequestMapping(value = "/jsonp", method = { RequestMethod.GET })
	@ResponseBody
	public Object jsonp(HttpServletRequest request,
			HttpServletResponse response, String callback) throws Exception {
		// TODO Auto-generated method stub
		Map map = new HashMap();
		map.put("status", "y");
		// 如果不存在callback这个请求参数,说明不是跨域请求,直接返回结果json
		if (callback == null || callback.length() == 0) {
			return map;
		} else {
			// 存在callback参数,则需要支持jsonp调用,并设置回调函数
			MappingJacksonValue value = new MappingJacksonValue(map);
			value.setJsonpFunction(callback);
			return value;
		}
	}
}

访问http://localhost:8080/testSpringWeb/jsonp会返回json:
{"status":"y"}
访问http://localhost:8080/testSpringWeb/jsonp?callback=yes会返回jsonp:
yes({"status":"y"});

附带页面访问jsonp方法,新建jsonp.jsp:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ page contentType="text/html ; charset=UTF-8"%>
<html>
	<head>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<script type="text/javascript" src="resources/js/jquery.js"></script>
		<!-- jquery方法一:不指定回调函数名,jquery随机生成 -->
		<script>
			$(window).load(function(){
				$.ajax({
			        url: 'http://127.0.0.1:8080/testSpringWeb/jsonp',
			        dataType: 'jsonp',
			        success:function (result) {
				    	//TODO
				    	alert("ajax.jsonp:"+result.status);  
				    }
			    });
			})
		</script>
		<!-- jquery方法二:指定回调函数名 -->
		<script>
			$(window).load(function(){
				$.ajax({
			        url: 'http://127.0.0.1:8080/testSpringWeb/jsonp',
			        dataType: 'jsonp',
			        jsonpCallback: 'ajaxCallback', 
			        contentType: 'application/jsonp;charset=UTF-8',
			    }).done(function (result) {
			    	//TODO
			    	alert("ajax.done:"+result.status);  
			    }).fail(function (result, textStatus, info) {
			    	//TODO
			    	alert("ajax.fail:"+result+":"+textStatus+":"+info);  
			    });
			})
		    function ajaxCallback(result) {  
		        //alert(result);  
		        for(var i in result) {  
		            alert("ajax.callback:"+i+"="+result[i]);//循环输出a:1,b:2,etc.  
		        }  
		    } 
		</script>
	</head>
	<body>
		<!-- 通过创建script标签访问   -->
		<script type="text/javascript">
		    function documentCallback(result) {  
		        //alert(result);  
		        for(var i in result) {  
		            alert("document.callback:"+i+"="+result[i]);//循环输出a:1,b:2,etc.  
		        }  
		    }  
		    var JSONP=document.createElement("script");  
		    JSONP.type="text/javascript";  
		    JSONP.src="http://localhost:8080/testSpringWeb/jsonp?callback=documentCallback";  
		    document.getElementsByTagName("head")[0].appendChild(JSONP);  
		</script>
		<!-- 通过iframe访问 -->
		<iframe
			src="javascript:'<script>function iframe(o){alert(\'iframe.callback:\'+o.status);}</script><script src=http://127.0.0.1:8080/testSpringWeb/jsonp?callback=iframe></script>'"></iframe>
	</body>
</html>

四种访问jsonp的方式:
  • document创建script标签,src为jsonp地址
  • 创建iframe,src为jsonp地址
  • 使用jquery新建ajax请求,callback为匿名函数。jquery将自动生成随机的callback名如jQuery191015429333912171872_1494838463136
  • 使用jquery新建ajax请求,指定jsonpCallback参数

访问http://127.0.0.1:8080/testSpringWeb/jsonp.jsp可看到弹出提示:
iframe.callback:y
document.callback:status=y
ajax.jsonp:y
ajax.callback:status=y
ajax.done:y
0
1
分享到:
评论

相关推荐

    Spring MVC 学习笔记 九 json格式的输入和输出

    对于响应,我们可以返回一个对象或集合,Spring MVC会自动将其转换为JSON并设置合适的HTTP响应头。例如,我们可以在控制器方法中返回一个`List&lt;User&gt;`,客户端将收到一个包含用户列表的JSON数组。 5. **自定义JSON...

    spring MVC 对 ResponseBody返回json数据进行脱敏处理

    在Spring MVC框架中,开发Web应用时经常需要将对象转换为JSON格式的数据并返回给客户端。然而,在处理敏感数据时,我们可能希望对这些数据进行脱敏,即隐藏或替换某些字段,以保护用户隐私或者确保数据安全性。本文...

    spring mvc(整合了json)

    4. **控制器方法的编写**:在 Spring MVC 的控制器类中,我们可以定义处理 HTTP 请求的方法,并使用 `@RequestBody` 和 `@ResponseBody` 注解来接收和返回 JSON 数据。例如: ```java @RequestMapping(value = "/...

    四. Spring MVC 3 支持json及 常见错误解决

    在Spring MVC 3中,对JSON的支持是其重要的特性之一,它使得前后端数据交互更加便捷,尤其在如今的Web应用中,JSON已经成为数据传输的标准格式。本篇将深入探讨Spring MVC 3对JSON的支持以及解决常见错误的方法。 ...

    spring mvc json&&jackson jquery js

    1. **创建Controller**:定义Spring MVC的控制器类,使用`@RequestMapping`注解映射URL,并使用`@ResponseBody`返回JSON数据。 2. **配置Jackson**:在Spring配置文件中启用Jackson并配置其属性,如日期格式化。 3. ...

    三个必备json包并附上spring mvc 返回json的配置

    最近在整spring mvc 返回json的配置,网上搜集整理了一下,觉得蛮有用的就共享出来,三个必备json包并附spring mvc 返回json的配置,此包有两个版本json包,一个2.6一个2.2

    spring-mvc-jsonview源代码

    当返回类型为@RequestBody或@ResponseBody时,Spring MVC会自动将返回的对象转换为JSON,发送到客户端。 三、源代码分析 1. pom.xml:项目依赖管理文件,包含了Spring MVC、Jackson库和其他相关依赖。例如,添加...

    spring mvc返回json几个包 jackson1.9.13

    总有4个包 jackson-core-asl-1.9.13.jar jackson-core-lgpl-1.9.13 jackson-mapper-asl-1.9.13 jackson-mapper-lgpl-1.9.13

    Spring3 MVC Ajax with JSON

    这个项目提供的示例工程应该包含了一个工作流程的完整实例,从Ajax请求到Spring MVC的处理,再到JSON响应的返回,帮助开发者理解并掌握这一技术栈的使用。通过深入研究和实践,你将能够熟练地在自己的项目中应用这些...

    Spring MVC返回JSON数据 用到的jar包

    在Spring MVC中,为了将Java对象转换成JSON格式并返回给客户端,我们需要依赖于JSON库。在提供的信息中,提到了`jackson-all-1.9.x.jar`系列的包,这是Jackson库的一个早期版本。Jackson是一个非常流行的JSON处理库...

    spring—mvc -json

    本示例提供了一个完整的返回JSON数据的接口的Spring MVC Demo,帮助开发者理解如何在Spring MVC应用中实现JSON序列化和反序列化。 首先,我们需要了解JSON的基本结构。JSON是一种轻量级的数据交换格式,它基于...

    详解Spring MVC3返回JSON数据中文乱码问题解决

    总的来说,解决Spring MVC3返回JSON数据中文乱码的问题,关键在于正确设置字符编码。无论是使用Java的PrintWriter直接写入UTF-8编码的数据,还是先将数据编码为GBK后写入到ServletOutputStream中,又或者是在框架...

    springmvc对json支持

    8. **错误处理**:当JSON序列化或反序列化失败时,Spring MVC会自动抛出异常并返回一个错误响应。为了提供更友好的错误信息,可以配置异常处理器或者自定义错误视图。 总结起来,Spring MVC对JSON的支持主要依赖于...

    spring mvc拦截器过滤json中的null值

    在Spring MVC框架中,我们经常需要处理JSON数据,这些数据可能包含null值。在某些情况下,为了保持数据的整洁和避免后端处理null值时出现异常,我们需要在数据传输前过滤掉这些null值。本教程将详细介绍如何使用...

    Spring mvc Json处理实现流程代码实例

    本文将深入探讨Spring MVC中JSON处理的实现流程,包括接收JSON参数和返回JSON响应。 1. **接收JSON参数** 当前端(如浏览器)向服务器发送JSON数据时,Spring MVC 提供了多种接收方式。一种是通过`...

    spring mvc + spring + mybatis+json整合

    以上是关于“spring mvc + spring + mybatis+json整合”的详细说明,这个整合方案是构建Web应用程序的常用技术栈,能够实现高效、灵活且可维护的开发。通过理解并掌握这些知识点,开发者可以更自如地开发和维护复杂...

    最全最经典spring-mvc教程

    除此之外,教程可能还会涵盖Spring MVC的RESTful API设计,如何创建JSON响应,以及使用Spring Boot快速构建Spring MVC应用。Spring Boot简化了配置,提供了预配置的依赖,使得开发者能更快地启动项目。 错误处理和...

    spring mvc json学习

    在本文中,我们将深入探讨“Spring MVC JSON学习”这一主题,重点关注如何在Spring MVC应用中处理JSON数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁性和易读性而被广泛应用。 ...

    spring mvc生成xml或json

    在Spring MVC框架中,开发人员经常需要处理不同的数据交换格式,如XML和JSON,以便与客户端进行交互。这两种格式在Web应用中广泛用于传输数据,因为它们轻量级且易于解析。下面我们将深入探讨如何在Spring MVC中生成...

    用Spring MVC 搭建JSON 数据服务器(二)

    在本教程中,我们将深入探讨如何使用Spring MVC框架构建一个返回JSON格式数据的服务器。首先,这个项目涉及的技术栈包括Spring MVC、JDBC、JSON以及Gson。Spring MVC是Spring框架的一部分,它允许我们构建RESTful ...

Global site tag (gtag.js) - Google Analytics