Gson (自定义转化器) 日期转换异常:Caused by: java.text.ParseException: Failed to parse date

简介: Gson (自定义转化器) 日期转换异常:Caused by: java.text.ParseException: Failed to parse date

报错异常:

* com.google.gson.JsonSyntaxException: 1478833871000
 * Caused by: java.text.ParseException: Failed to parse date ["1478833871000"]: Invalid time zone indicator '7'
 * Caused by: java.lang.IndexOutOfBoundsException: Invalid time zone indicator '7'

导致原因:

数据库存储的创建时间为timestamp类型,导致Gson日期转换异常

  1. 第一次尝试
尝试转换时间转换 @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 1. 结果抛出异常的日期格式为LOng类型的毫秒数的格式
  1. 网上来源
Gson对于毫秒值解析的支持没有fastJson,从官网上看需要提供自定义转化器
 * 官网上说,在处理日期类型的时候经常出现内置转换器无法转换成功的情况,需要我们自己去定义一个转换器去进行转换,然后也告知了我们如何去定义自己的转换器

问题的解决

根据官网给定的方式,直接通过匿名内部类的方式实现了 JsonDeserializer 接口,重写 deserialize 方法,代码如下:

public static Gson catchParseDate() {
        // 创建gson对象构建器
        GsonBuilder gsonBuilder = new GsonBuilder();
        // 实现将long 类型的日期格式转换为国际标准格式
        gsonBuilder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
            public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws
                    JsonParseException {
                return new Date(json.getAsJsonPrimitive().getAsLong());
            }
        });
        //        // 创建gson对象
        return gsonBuilder.create();
    }
目录
相关文章
|
26天前
|
Java
让星星⭐月亮告诉你,自定义定时器和Java自带原生定时器
定时器是一种可以设置多个具有不同执行时间和间隔的任务的工具。本文介绍了定时器的基本概念、如何自定义实现一个定时器,以及Java原生定时器的使用方法,包括定义定时任务接口、实现任务、定义任务处理线程和使用Java的`Timer`与`TimerTask`类来管理和执行定时任务。
43 3
|
2天前
|
Java
Java异常捕捉处理和错误处理
Java异常捕捉处理和错误处理
8 1
|
4天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
12 2
|
11天前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
|
14天前
|
存储 安全 Java
如何避免 Java 中的“ArrayStoreException”异常
在Java中,ArrayStoreException异常通常发生在尝试将不兼容的对象存储到泛型数组中时。为了避免这种异常,确保在操作数组时遵循以下几点:1. 使用泛型确保类型安全;2. 避免生类型(raw types)的使用;3. 在添加元素前进行类型检查。通过这些方法,可以有效防止 ArrayStoreException 的发生。
|
15天前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
29 2
|
18天前
|
Java 索引
如何避免在 Java 中引发`StringIndexOutOfBoundsException`异常
在Java中,处理字符串时若访问了不存在的索引,会抛出`StringIndexOutOfBoundsException`异常。为避免此异常,应确保索引值在有效范围内,例如使用`length()`方法检查字符串长度,并确保索引值不小于0且不大于字符串长度减1。
|
20天前
|
安全 Java
如何在 Java 中创建自定义安全管理器
在Java中创建自定义安全管理器需要继承SecurityManager类并重写其方法,以实现特定的安全策略。通过设置系统安全属性来启用自定义安全管理器,从而控制应用程序的访问权限和安全行为。
|
20天前
|
安全 Java 数据安全/隐私保护
如何配置 Java 安全管理器来避免访问控制异常
配置Java安全管理器以防止访问控制异常,需在启动JVM时通过 `-Djava.security.manager` 参数启用,并设置安全策略文件,定义权限规则,限制代码执行操作,确保应用安全。
|
1月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
56 2
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
下一篇
无影云桌面