Java中Date类型字段转成JSON字符串会自动转换为时间戳

一、遇到问题

Java中自定义的实体类对象中存在Date类型字段,字段值为:2023-10-18 22:20:53。将该实体类对象使用FastJSON转成JSON字符串后,发现时间字段变成了“1697638853”这样的时间戳

二、解决方法

针对上述问题,FastJSON提供了解决方法

引入包

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.48</version>
        </dependency>

方法1:在对应的实体类的属性上方定义一个注解

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(
            timezone = "GMT+8",
            pattern = "yyyy-MM-dd HH:mm:ss"
    )


方法2: 在servlet中将数据转换成json对象时,使用

String jsonString = JSON.toJSONString(date, 
SerializerFeature.DisableCircularReferenceDetect,
 SerializerFeature.WriteDateUseDateFormat, 
"yyyy-MM-dd HH:mm:ss");

在这个方法中,你提供了一些参数:

  • 第一个参数 date 是你想要转换为 JSON 的 Java 对象,这里看起来像是你想将一个日期对象转换为 JSON。
  • 第二个参数 SerializerFeature.DisableCircularReferenceDetect 是一个序列化特性,用于禁止循环引用检测。如果对象中存在循环引用(一个对象引用自身或者多个对象之间形成环状引用),这个特性可以防止程序因为无限递归而崩溃。如果你确定你的对象中没有循环引用,或者你希望忽略循环引用,那么可以使用这个特性。
  • 第三个参数 SerializerFeature.WriteDateUseDateFormat 也是一个序列化特性,用于控制Fastjson如何将日期对象转换为字符串。如果你提供了这个特性,Fastjson会使用你提供的日期格式将日期对象转换为字符串,而不是使用默认的格式。
  • 第四个参数 需要格式化的格式
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个JAVA定时任务存储JSON字符串并查询数据表的示例代码: ``` import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import org.json.JSONObject; public class JsonStorageTask extends TimerTask { private static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase"; private static final String DB_USER = "root"; private static final String DB_PASSWORD = "password"; private static final String TABLE_NAME = "mytable"; private static final String COLUMN_NAME = "json_data"; private Connection connection; public JsonStorageTask() { try { connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); } catch (SQLException e) { e.printStackTrace(); } } @Override public void run() { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date now = Calendar.getInstance().getTime(); String timestamp = dateFormat.format(now); JSONObject data = new JSONObject(); data.put("timestamp", timestamp); data.put("value", Math.random() * 100); String jsonData = data.toString(); storeJsonData(jsonData); queryJsonData(); } private void storeJsonData(String jsonData) { try { String sql = "INSERT INTO " + TABLE_NAME + " (" + COLUMN_NAME + ") VALUES (?)"; PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, jsonData); statement.executeUpdate(); statement.close(); } catch (SQLException e) { e.printStackTrace(); } } private void queryJsonData() { try { String sql = "SELECT * FROM " + TABLE_NAME; PreparedStatement statement = connection.prepareStatement(sql); ResultSet resultSet = statement.executeQuery(); while (resultSet.next()) { String jsonData = resultSet.getString(COLUMN_NAME); JSONObject data = new JSONObject(jsonData); System.out.println("Timestamp: " + data.getString("timestamp")); System.out.println("Value: " + data.getDouble("value")); } resultSet.close(); statement.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new JsonStorageTask(), 0, 5000); // run every 5 seconds } } ``` 这个示例代码在每5秒钟执行一次定时任务,生成一个JSON字符串并存储到数据库,然后查询数据表并打印出来。JSON字符串包含一个时间戳和一个随机数值。在存储和查询数据时,使用了预编译的SQL语句,可以防止SQL注入攻击。注意修改DB_URL、DB_USER、DB_PASSWORD、TABLE_NAME和COLUMN_NAME等常量的值以适配你自己的环境。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值