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

一、问题背景

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

二、解决办法

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

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

@JSONField(format = “yyyy-MM-dd HH:mm:ss”)

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

JSON.toJSON(date,SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.WriteDateUseDateFormat)

现在在前台显示的时候就会显示成 (年-月-日 时:分:秒) 的格式

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个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等常量的值以适配你自己的环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值