java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > spring mvc传递json数据

Spring MVC传递json格式的数据两种方法

作者:我不会写代码啊啊啊

文章介绍了两种使用SpringMVC传递JSON数据的方法,每种方法结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

测试使用Spring MVC传递json格式的数据

第一种方式:使用fastjson jar包
这里仅展示Servlet和jsp页面(jsp页面使用ajax)

<%@ 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>
	<a href="" onclick=" rel="external nofollow" testjson()">点击发送请求</a>
	<script type="text/javascript">
		//原生Ajax
		//创建一个ajax方法
		function reqget(){
			//1、创建核心对象XMLHttpRequest
			var request=new XMLHttpRequest();
			//2、准备请求 open(请求类型,请求地址,是否异步传输(一般为true))
			request.open("GET","servlet?name=张三&pwd=123456",true);
			//3、接收响应数据
			request.onreadystatechange=function(){
				//4、判断响应是否结束
				if(request.readyState==4){
					//5、判断状态码
					if(request.status==200 || request.status==304){
						//获取响应的数据 responseText
						alert("GET : "+request.responseText);
					}
				}
			}
			//6、发送请求
			request.send();
		}
		function reqpost(){
			//1、创建核心对象XMLHttpRequest
			var request=new XMLHttpRequest();
			//2、准备请求 open(请求类型,请求地址,是否异步传输(一般为true))
			request.open("POST","servlet",true);
			//3、接收响应数据
			request.onreadystatechange=function(){
				//4、判断响应是否结束
				if(request.readyState==4){
					//5、判断状态码
					if(request.status==200 || request.status==304){
						//获取响应的数据 responseText
						alert("POST : "+request.responseText);
					}
				}
			}
			//设置请求头(把数据类型转换为url编码的form表单)
			request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
			//6、发送请求
			request.send("name=张三&pwd=123456");
		}
		function testjson(){
			//1、创建核心对象XMLHttpRequest
			var request=new XMLHttpRequest();
			//2、准备请求 open(请求类型,请求地址,是否异步传输(一般为true))
			request.open("POST","servlet",true);
			//3、接收响应数据
			request.onreadystatechange=function(){
				//4、判断响应是否结束
				if(request.readyState==4){
					//5、判断状态码
					if(request.status==200 || request.status==304){
						//获取响应的数据 responseText
						var msg=request.responseText;
						//解析Json字符串(转换为对象)
						var obj=eval("("+msg+")");
						alert(obj.code);
						alert(obj.msg);
					}
				}
			}
			//设置请求头(把数据类型转换为url编码的form表单)
			request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
			//6、发送请求
			request.send("name=张三&pwd=123456");
		}
	</script>
</body>
</html>
package com.xyj.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
@WebServlet(name = "servlet", urlPatterns = { "/servlet" })
public class Servlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public Servlet() {
        super();
    }
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		System.out.println("接收到了前端的请求");
		/*String name = request.getParameter("name");
		String pwd = request.getParameter("pwd");
		System.out.println(name);
		System.out.println(pwd);
		String msg="张三".equals(name) && "123456".equals(pwd)?"登录成功":"登录失败";
		response.getWriter().print(msg);*/
		//返回json数据
		Result r=new Result();
		r.setCode(0);
		r.setMsg("获取信息成功");
		String jsonString = JSONObject.toJSONString(r);
		response.getWriter().print(jsonString);
	}
}

第二种方式:
第二种方式使用Spring MVC和另外三个jar包,分别是:

使用这种方式需要首先在Spring MVC的配置文件中开启Spring MVC的注解

<!-- 开启Spring MVC注解 -->
	<mvc:annotation-driven></mvc:annotation-driven>

然后编写控制器,如:

package com.xyj.handler;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.xyj.entity.Emp;
@Controller	//把当前类标记为控制器
public class TestHandler {
	@RequestMapping(value="testJson",produces="application/json;charset=utf-8")
	@ResponseBody //把返回的值转化为json对象
	public List<Emp> testJson() {
		List<Emp> list=new ArrayList<Emp>();
		Emp emp1=new Emp(1001,"张武","werw45");
		Emp emp2=new Emp(1002,"张淑","3e4t5y");
		Emp emp3=new Emp(1001,"张灵","fr6565");
		list.add(emp1);
		list.add(emp2);
		list.add(emp3);
		return list;//集合会自动转换成json数组
	}
	@RequestMapping(value="testJson2",produces="application/json;charset=utf-8")
	@ResponseBody //把返回值转化为json对象
	public Result testJson2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		System.out.println("接收到了前端的请求");
		//返回json数据
		Result r=new Result();
		r.setCode(0);
		r.setMsg("获取信息成功");
		return r;
	}
}

@ResponseBody注解,该注解的作用是将标注该注解的处理方法的返回结果直接写入HTTP Response Body(Response对象的body数据区)中。一般情况下,@ResponseBody都会在异步获取数据时使用,被其标注的处理方法返回的数据将输出到响应流中,客户端获取并显示数据。

@RequestMapping中配置produces是为了解决乱码问题。
produces:指定返回的内容类型。produces=“application/json;charset=utf-8”:表示该处理方法将产生JSON格式的数据,此时会根据请求报文头中事务Accept进行匹配,若请求报文头“Accept:application/json”时即可匹配,并且字符串的转换编码为“UTF-8”。

访问testJson,显示如下:

但是使用上面的方式需要在每一个方法上面都加入@ResponseBody注解,有什么方式能自动使所有方法都返回json数据呢,只需把类上面的@Controller注解替换为@RestController注解即可

到此这篇关于Spring MVC传递json格式的数据的文章就介绍到这了,更多相关spring mvc传递json数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文