json日期传到页面是Object

本文介绍了解决JSON日期在页面上显示为Object的问题,通过两种方法将日期格式化为易读的字符串格式,适用于模态框展示。一种是在实体类中使用SimpleDateFormat进行格式化,另一种是直接将日期字段改为String类型。

json日期传到页面是Object
弹出模态框中应该显示时间的地方,显示成了Object类型,想要变成时间格式,针对我自己的项目,采用了两种解决方式。
1.我的mapping中查询语句返回类型,采用的是resultType=实体类,所以输出类型与实体类一致,而我的实体类中定义的时间是date类型
mapping文件:

<!--  按照id查找  -->
    <select id="findById" resultType="LeaveData">
        select * from leavedata
        where id=#{id}
    </select>

实体类

private Date startTime;

第一种解决方式,往模态框传数据是发送请求,所以再获取数据时进行格式化
修改get方法,进行时间的格式化

public String getStartTime() {
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        return sf.format(startTime);
    }

这时获取到的就是String类型了,运行截图
在这里插入图片描述
第二种解决方式,直接将时间字段改成String类型,get和set方法默认生成,切记数据库和相关代码部分都要改,否则会在存入数据库时报错。

private String startTime;
<think>我们正在讨论前后端如何通过JSON进行数据传输。根据引用内容,我们可以将过程分为前端部分和后端部分,并分为发送数据和接收数据两个方向。下面我将详细解释整个过程。 ### 一、后端发送数据给前端 1. **后端处理数据**(引用[1][2][4]): - 后端将数据转换为JSON格式的字符串。 - 在Java中,可以使用Gson库(如引用[4])或Jackson等库将Java对象转换为JSON字符串。 - 示例代码(Java使用Gson): ```java User user = new User("hhh", "七期", "java", "123456", "22506", "123"); Gson gson = new Gson(); String jsonStr = gson.toJson(user); // 将Java对象转为JSON字符串 ``` 2. **后端发送数据**: - 后端通过HTTP响应将JSON字符串发送给前端(通常设置Content-Type为`application/json`)。 3. **前端接收数据**(引用[1][2]): - 前端使用Ajax(如jQuery的`$.ajax`)或Fetch API发起请求,并设置`dataType: 'json'`(或使用`response.json()`),这样会自动将响应体解析为JavaScript对象。 - 如果使用`eval`或`JSON.parse`手动解析(引用[1][2]),需要确保字符串是安全的(避免使用`eval`因为其有安全风险)。 - 示例(jQuery): ```javascript $.ajax({ url: "myfileAction", dataType: "json", // 自动解析为JS对象 type: "post", success: function(data) { // data已经是JS对象 // 处理数据 } }); ``` 4. **前端处理数据**(引用[2][3]): - 将JSON对象的数据通过DOM操作渲染到页面上。 - 示例: ```javascript success: function(data) { // 假设data是对象数组 let html = ''; data.forEach(item => { html += `<div>${item.name}: ${item.value}</div>`; }); document.getElementById('container').innerHTML = html; } ``` ### 二、前端发送数据给后端 1. **前端准备数据**(引用[1][3]): - 前端将用户输入的数据组装成JavaScript对象。 - 使用`JSON.stringify()`将JavaScript对象转换为JSON字符串。 - 示例: ```javascript let dataToSend = { username: 'user123', password: 'pass123' }; // 转换为JSON字符串 let jsonString = JSON.stringify(dataToSend); ``` 2. **前端发送数据**(引用[1]): - 通过Ajax将JSON字符串发送给后端。 - 设置请求头`Content-Type: application/json`。 - 示例(jQuery): ```javascript $.ajax({ url: "loginAction", type: "post", contentType: "application/json", // 告诉后端发送的是JSON data: jsonString, // JSON字符串 success: function(response) { // 处理响应 } }); ``` 3. **后端接收数据**: - 后端接收请求,从请求体中获取JSON字符串。 - 使用JSON解析库(如Gson)将JSON字符串转换为Java对象。 - 示例(Java使用Gson): ```java // 假设从请求中获取JSON字符串 String jsonStr = request.getParameter("jsonData"); // 或者从请求体读取 // 或者使用Spring MVC等框架可以直接绑定到对象 // 手动解析 Gson gson = new Gson(); User user = gson.fromJson(jsonStr, User.class); ``` ### 三、注意事项 1. **安全性**: - 避免使用`eval()`解析JSON(引用[2]),因为可能执行恶意代码,应使用`JSON.parse()`。 - 对后端传来的数据要进行验证和过滤,防止XSS攻击。 2. **前后端分离**(引用[2]): - 前后端通过JSON交互,实现解耦。 - 后端只负责提供数据接口,前端负责展示和交互。 3. **数据格式**: - 确保前后端使用相同的字段名和数据结构。 - 使用一致的日期、数字等格式(可约定使用ISO 8601日期格式)。 ### 四、完整示例(前后端交互) **前端代码(使用原生JavaScript)**: ```javascript // 发送数据到后端 function sendData() { let userData = { name: "张三", age: 25 }; fetch('/api/user', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(userData) }) .then(response => response.json()) .then(data => { console.log('响应数据:', data); // 将响应数据显示在页面上 document.getElementById('result').innerHTML = `姓名: ${data.name}, 年龄: ${data.age}`; }); } ``` **后端代码(Java Servlet示例)**: ```java @WebServlet("/api/user") public class UserServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { // 读取请求体中的JSON字符串 StringBuilder sb = new StringBuilder(); try (BufferedReader reader = request.getReader()) { String line; while ((line = reader.readLine()) != null) { sb.append(line); } } String jsonStr = sb.toString(); // 解析JSON Gson gson = new Gson(); User user = gson.fromJson(jsonStr, User.class); // 处理业务(例如保存到数据库) // 返回处理后的数据(假设返回相同的用户数据) response.setContentType("application/json"); response.getWriter().print(gson.toJson(user)); } } ``` ### 总结 - **后端到前端**:后端将数据转为JSON字符串 → 前端通过Ajax接收并解析为JS对象 → 渲染到页面。 - **前端到后端**:前端将JS对象转为JSON字符串 → 发送给后端 → 后端解析为Java对象并处理。 通过JSON格式,前后端实现了数据的标准化传输,使得系统更加灵活和可维护[^1][^2][^3][^4]。 §§相关问题§§ 1. 如何防止JSON数据传输中的安全风险(如XSS攻击)? 2. 如何处理JSON中的日期和时间格式? 3. 在大数据量下,如何优化JSON的传输效率?</think>### 前后端通过 JSON 传输数据的完整流程 #### 一、数据格式基础 JSON(JavaScript Object Notation)是轻量级的数据交换格式,前后端传输时主要使用两种形式: 1. **JSON 对象**:JavaScript 可直接操作的数据结构(前端使用) ```javascript let user = { name: "张三", age: 25, address: { city: "北京" } }; ``` 2. **JSON 字符串**:网络传输的标准格式(前后端传输使用) ```json "{\"name\":\"张三\",\"age\":25,\"address\":{\"city\":\"北京\"}}" ``` --- #### 二、核心传输流程 ##### 1. 后端 → 前端(数据获取) ```mermaid sequenceDiagram 后端->>后端: 将数据转为JSON字符串(Gson/Jackson) 后端->>前端: 发送HTTP响应(Content-Type: application/json) 前端->>前端: 解析JSON字符串为JS对象(JSON.parse()) 前端->>页面: 渲染数据到DOM ``` **后端示例(Java + Gson)**: ```java // 引用[4]示例 User user = new User("hhh", "七期", "java"); Gson gson = new Gson(); String jsonStr = gson.toJson(user); // 对象→JSON字符串 response.setContentType("application/json"); response.getWriter().write(jsonStr); // 发送给前端 ``` **前端处理(AJAX)**: ```javascript // 引用[1][2]示例 $.ajax({ url: "myfileAction", dataType: "json", // 自动解析JSON success: function(data) { // data已是JS对象 let html = `<div>用户名:${data.name}</div>`; document.getElementById("container").innerHTML = html; } }); ``` ##### 2. 前端 → 后端(数据提交) ```mermaid sequenceDiagram 前端->>前端: 将表单数据转为JSON对象 前端->>前端: 转为JSON字符串(JSON.stringify()) 前端->>后端: 发送AJAX请求(POST + application/json) 后端->>后端: 解析JSON字符串为对象(Gson/Jackson) ``` **前端示例**: ```javascript const formData = { username: document.getElementById("user").value, password: document.getElementById("pass").value }; // 引用[3]方法 fetch("/api/login", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(formData) // 对象→JSON字符串 }); ``` **后端解析(Java)**: ```java // 获取请求体中的JSON字符串 StringBuilder sb = new StringBuilder(); try (BufferedReader reader = request.getReader()) { String line; while ((line = reader.readLine()) != null) { sb.append(line); } } String jsonStr = sb.toString(); // 字符串→Java对象 User user = new Gson().fromJson(jsonStr, User.class); ``` --- #### 三、关键技术点 1. **数据转换方法**: - 前端:`JSON.stringify()`(对象→字符串),`JSON.parse()`(字符串→对象) - 后端:Gson/Jackson 库(Java),json 模块(Python) 2. **HTTP 头设置**(必须): ```http Content-Type: application/json // 声明传输的是JSON ``` 3. **安全注意事项**: - 避免使用 `eval()` 解析 JSON(引用[1][2]),存在 XSS 风险 - 后端需验证 JSON 数据结构防止注入攻击 4. **日期等特殊类型处理**: - 约定使用 ISO 8601 格式:`"2023-05-20T12:00:00Z"` - 或使用时间戳:`1684584000000` --- #### 四、完整前后端分离示例 **前端页面**: ```html <button onclick="loadData()">加载用户数据</button> <div id="output"></div> <script> async function loadData() { const response = await fetch('/api/users'); const users = await response.json(); // 自动解析JSON let html = ""; users.forEach(user => { html += `<div>${user.name} - ${user.email}</div>`; }); document.getElementById("output").innerHTML = html; } </script> ``` **后端接口(Java Servlet)**: ```java @WebServlet("/api/users") public class UserServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { List<User> users = userService.getAllUsers(); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().print(new Gson().toJson(users)); } } ``` --- ### 总结流程 1. **后端准备数据** → 序列化为 JSON 字符串 → 通过 HTTP 响应发送 2. **前端接收响应** → 解析 JSON 字符串为对象 → 渲染到页面 3. **前端收集数据** → 转为 JSON 字符串 → 通过 HTTP 请求发送 4. **后端接收请求** → 解析 JSON 字符串为对象 → 业务处理 通过 JSON 格式实现前后端解耦,是现代 Web 开发的核心实践[^1][^2][^3][^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值