如何在响应中通过JSON格式传递数据
在响应中通过JSON格式传递数据
步骤
- 添加 jackson-annotations.jar、jackson-core.jar、jackson-databind.jar的jar包
- 通过 jackson API 将 Java 对象转换为JSON 格式的数据
- 修改响应头,设置响应类型为 application/json
- 将结果基于字符输出流推回客户端浏览器
- 在页面中通过 JavaScript 的 JSON.parse()函数将 JSON 格式的数据转换为 JavaScript 对象
通过 JSON 格式在响应中传递单个对象
需求:
1)定义一个 Users 类,包含 userid、username 属性。
public class User {
private Integer userid;
private String username;
public User(Integer userid, String username) {
this.userid = userid;
this.username = username;
}
public Integer getUserid() {
return userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
2)实例化一个 Users 对象,通过 JSON 格式将 Users 对象响应到客户端浏览器。
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 java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/json")
public class JsonTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
User user1=new User(1,"zhangsan");
//使用jackson的API将Users对象转换为JSON格式的字符串对象
ObjectMapper objectMapper=new ObjectMapper();
//将User对象转换成JSON格式的字符串对象
String obj=objectMapper.writeValueAsString(user1);
//使用字符流做数据的响应
PrintWriter pw=resp.getWriter();
//将转换完的obj对象推回给客户端
pw.print(obj);
//刷新流
pw.flush();
//关闭流
pw.close();
}
}
3)将 Users 对象中的数据插入到页面中。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script>
function but(){
// 创建 XMLHttpRequest 对象
var xhr=new XMLHttpRequest()
//给定请求方式以及请求地址
xhr.open("get","json")
//发送请求(异步请求的发送)
xhr.send();
//send执行完毕后,立刻执行下列方法(将函数的地址赋给onreadystatechange)
//回调,通过onreadystatechange回调自己写的函数
xhr.onreadystatechange=function (){ //处理结果集的过程
//0:open函数没有被调用
//1:open函数正在被调用
//2:send函数正在被调用
//3:服务端正在返回结果
//4:请求结束,并且服务端已经结束发送数据到客户端
//4表示响应结束,200表示响应成功
if (xhr.readyState==4 && xhr.status==200){
alert(xhr.responseText)
//通过JavaScript的内置对象JSON中的parse函数将JSON格式的字符串转换成Javascript对象
var obj=JSON.parse(xhr.responseText)
alert(obj.userid+" "+obj.username);
document.getElementById("span").innerHTML=obj.userid+" "+obj.username;
}
}
}
</script>
<body>
<span id="span"></span>
<input type="button" value="ok" onclick="but()"/>
</body>
</html>
通过 JSON 格式在响应中传递多个对象
需求:
1)定义一个 Users 类,包含 userid、username 属性
public class User {
private Integer userid;
private String username;
public User(Integer userid, String username) {
this.userid = userid;
this.username = username;
}
public Integer getUserid() {
return userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
2)实例化多个 Users 对象,通过 JSON 格式将 Users 对象响应到客户端浏览器
import com.fasterxml.jackson.databind.ObjectMapper;
import www.lin.pojo.User;
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 java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/json2")
public class JsonTest2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建User对象
User user1=new User(1,"zhangsan");
User user2=new User(2,"lisi");
User user3=new User(3,"wangwu");
//创建list集合,将user对象放进list集合
List<User> list=new ArrayList<>();
list.add(user1);
list.add(user2);
list.add(user3);
//使用jackson的API将List集合转换成JSON格式的字符串对象
ObjectMapper objectMapper=new ObjectMapper();
//将list集合转换成JSON格式的字符串对象
String obj=objectMapper.writeValueAsString(list);
System.out.println(list);
//设置响应类型
resp.setContentType("application/json");
//使用字符流做数据的响应
PrintWriter pw=resp.getWriter();
//将获得的字符串推回给客户端
pw.print(obj);
pw.flush();
pw.close();
}
}
3)将 Users 对象中的数据插入到页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script>
function but(){
// 创建 XMLHttpRequest 对象
var xhr=new XMLHttpRequest();
//给定请求方式和请求地址
xhr.open("get","json2")
//发送请求(异步请求的发送)
xhr.send()
//send执行完毕后,立刻执行下列方法(将函数的地址赋给onreadystatechange)
//回调函数,通过onreadystatechange回调自己写的函数
xhr.onreadystatechange=function (){
//4表示响应结束,200表示响应成功
if (xhr.readyState==4 && xhr.status==200){
alert(xhr.responseText)
//通过JavaScript的内置对象JSON的parse方法将json格式字符串转换成JavaScript对象
var obj=JSON.parse(xhr.responseText)
var temp=""
for (i=0;i<obj.length;i++){
alert(obj[i].userid+" "+obj[i].username)
temp=temp+obj[i].userid+" "+obj[i].username+"</br>"
}
document.getElementById("span").innerHTML=temp
}
}
}
</script>
</head>
<body>
<span id="span"></span>
<input type="button" value="ok" onclick="but()"/>
</body>
</html>
在JSON中通过Map传递数据
- 在 JSON 格式中可以直接使用 Map 作为传递数据的模型。
- Map 结构本身就是 key 与 value 的结构,与 JSON 格式对象模型完全匹配,因此可以直接将一个 Map 对象转换为 JSON 格式的字符串对象。
- 如果我们返回的数据并没有对应的模型来存放数据,要么创建新的模型,要么通过 Map 来解决,将Map当作通用模型。
servlet的创建
import com.fasterxml.jackson.databind.ObjectMapper;
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 java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
@WebServlet("/map")
public class MapModelServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建map集合,一个map对象表示的是一个json格式的对象
Map<String ,Object> map=new HashMap<>();
//向map集合里添加数据
map.put("userid",1);
map.put("url","map.do");
//使用Jackson的API将map集合转换成json格式的字符串
ObjectMapper objectMapper=new ObjectMapper();
//获取转换的字符串
String obj=objectMapper.writeValueAsString(map);
System.out.println(obj);
//设置响应类型
resp.setContentType("application/json");
//获取响应字符流
PrintWriter pw=resp.getWriter();
//将结果推回给客户端
pw.print(obj);
//刷新流
pw.flush();
//关闭流
pw.close();
}
}
jsp的创建
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script>
function but(){
//创建XMLHttpRequest对象
var xhr=new XMLHttpRequest()
//给定请求方式和请求地址
xhr.open("get","map")
//异步请求的发送
xhr.send()
//send执行完毕后,立刻执行下列方法(将函数的地址赋给onreadystatechange)
//回调函数,通过onreadystatechange回调自己写的函数
xhr.onreadystatechange=function (){
//0:open函数没有被调用
//1:open函数正在被调用
//2:send函数正在被调用
//3:服务端正在返回结果
//4:请求结束,并且服务端已经结束发送数据到客户端
//4表示响应结束,200表示响应成功
if (xhr.readyState==4 && xhr.status==200){
alert(xhr.responseText)
//通过JavaScript的内置对象JSON的parse方法将json格式字符串转换成JavaScript对象
var map=JSON.parse(xhr.responseText)
alert(map.userid)
alert(map.url)
document.getElementById("span").innerHTML=map.userid+" "+map.url
}
}
}
</script>
</head>
<body>
<span id="span"></span>
<input type="button" value="ok" onclick="but()">
</body>
</html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探