使用GSON反序列化Date与Timestamp

使用GSON反序列化Date日期类型失败
产生原因:

在实体类中使用了@SerializedName注解,它的包是:
import com.google.gson.annotations.SerializedName;
而gson序列化的日期类型为年月日时分秒的类型,因此出现错误

解决方法:

将Date类型的引入包有sql切换为util,并自定义了一个反序列化的类,然后使用Gson进行注册使用

public class GsonUtil {
    public static Gson createGsonWithDateAdapter() {
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(Date.class, (JsonDeserializer<Date>) (json, typeOfT, jsonDeserializationContext) -> {
            try {
                return new SimpleDateFormat("yyyy-MM-dd").parse(json.getAsString());
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
        });
        return gsonBuilder.create();
    }
}

使用Gson将Date与Timestamp日期类型分别转换

使用方法:

定义两个类型的序列化格式

将两种类型的序列化给Gson进行注册使用,分别解析其格式进行返回

使用Gson返回值为null的键值对不显示问题

解决方法:

对Gson进行serializeNulls()调用即可

Java 中,处理数据库中的 datetime 类型数据时,通常我们会使用 JDBC (Java Database Connectivity) API 来操作日期和时间。当你从数据库查询结果获取到 datetime 对象,或者需要将一个本地时间对象存储到数据库时,你可以这样做: 1. **从数据库查询**: 假设你有一个 `ResultSet` 对象,其中包含 datetime 类型的列,你可以通过 `getTimestamp()` 方法获取: ```java ResultSet rs = statement.executeQuery("SELECT datetime_column FROM table"); if (rs.next()) { java.sql.Timestamp dbDateTime = rs.getTimestamp("datetime_column"); // 然后你可以使用这个 Timestamp 对象做进一步的操作 } ``` 2. **创建并赋值**: 如果你想创建一个新的 java.util.Date 对象,并将其转换为 datetime 类型(如 SQL 的 TIMESTAMP),可以使用 `java.sql.Timestamp` 构造函数: ```java java.util.Date localDate = new java.util.Date(); // 或者从某个 Calendar 或 LocalDateTime 获取 java.sql.Timestamp sqlDateTime = new java.sql.Timestamp(localDate.getTime()); PreparedStatement pstmt = connection.prepareStatement("INSERT INTO table (datetime_column) VALUES (?)"); pstmt.setTimestamp(1, sqlDateTime); pstmt.executeUpdate(); ``` 3. **持久化至文件或 JSON**: 当你需要将时间对象序列化到文件或 JSON,可以使用 ObjectMapper 或 Gson 等库来处理: ```java ObjectMapper mapper = new ObjectMapper(); mapper.writeValue(new File("output.json"), yourDateTimeObject); // 对于 JSON ``` 记住,处理数据库的时间,最好遵循数据库驱动的具体API,因为不同的数据库可能会有细微的差别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值