Gson解析时间时报com.google.gson.JsonSyntaxException异常问题的解决

曾经终败给现在 2023-09-30 19:52 54阅读 0赞

Gson解析时间时报com.google.gson.JsonSyntaxException异常问题的解决

示例代码

  1. @Test
  2. public void testJsonToJavaBean() {
  3. String jsonString = "{\"bir\":1619330606019,\"id\":1,\"salary\":10000.0,\"userName\":\"userName--1\"}";
  4. Gson gson = getGson();
  5. DemoOne demoOne = gson.fromJson(jsonString, DemoOne.class);
  6. System.out.println("json字符窜转为java bean");
  7. System.out.println(demoOne);
  8. }

报错信息

com.google.gson.JsonSyntaxException: 1619330606019

at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:87)
at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:75)
at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:46)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory1. r e a d ( R e f l e c t i v e T y p e A d a p t e r F a c t o r y . j a v a : 131 ) a t c o m . g o o g l e . g s o n . i n t e r n a l . b i n d . R e f l e c t i v e T y p e A d a p t e r F a c t o r y 1.read(ReflectiveTypeAdapterFactory.java:131) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory1.read(ReflectiveTypeAdapterFactory.java:131)atcom.google.gson.internal.bind.ReflectiveTypeAdapterFactoryAdapter.read(ReflectiveTypeAdapterFactory.java:222)

解决方案

运行到gson解析JSON时报如上异常,代码没变,为什么在不同服务器上运行的结果就不一样了呢,后来各种搜索,才了解到Gson不同服务器在解析时间格式不一样,了解到这一点后,只需要在Gson实例化指定解析的格式即可,将

  1. Gson gson=new Gson();
  2. 替换为
  3. Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();

最终代码实现

对应测试的javabean

  1. @Data
  2. @AllArgsConstructor
  3. @NoArgsConstructor
  4. @Accessors(chain = true)
  5. public class DemoOne {
  6. private Integer id;
  7. private String userName;
  8. @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
  9. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  10. private Date bir;
  11. private Double salary;
  12. }

测试代码

  1. @Test
  2. public void testJavaBeanToJson() {
  3. DemoOne demoOne = new DemoOne().setBir(new Date()).setId(1).setSalary(10000.0).setUserName("张三");
  4. Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); //按照 yyyy-MM-dd HH:mm:ss格式化。Gson
  5. /**
  6. * 如果gson不进行时间格式化处理可能会报错
  7. * com.google.gson.JsonSyntaxException
  8. */
  9. // Gson gson = new Gson();
  10. String jsonString = gson.toJson(demoOne);
  11. System.out.println("java bean转为json格式字符窜");
  12. System.out.println(jsonString);
  13. }
  14. /*
  15. 控制台打印:
  16. java bean转为json格式字符窜
  17. {"id":1,"userName":"张三","bir":"2021-04-25 15:40:31","salary":10000.0}
  18. */
  19. /**
  20. * json格式字符窜转为 java bean
  21. */
  22. @Test
  23. public void testJsonToJavaBean() {
  24. String jsonString = "{\"id\":1,\"userName\":\"张三\",\"bir\":\"2021-04-25 15:36:49\",\"salary\":10000.0}";
  25. Gson gson = getGson();
  26. DemoOne demoOne = gson.fromJson(jsonString, DemoOne.class);
  27. System.out.println("json字符窜转为java bean");
  28. System.out.println(demoOne);
  29. }
  30. /*
  31. json字符窜转为java bean
  32. DemoOne(id=1, userName=张三, bir=Sun Apr 25 15:36:49 CST 2021, salary=10000.0)
  33. */

发表评论

表情:
评论列表 (有 0 条评论,54人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Gson解析JSON

    Gson解析JSON(包含动态KEY、未知字段处理方法) 有时在解析json数据中的字段key是动态可变的时候,由于Gson是使用静态注解的方式来设置实体对象的,因此我们很难

    相关 gson解析json

    为什么使用Gson > Gson是google一个比较流行的开源项目,相比于json,Gson的功能更加全面,性能更加强大,使用方式也更加便捷简单。 一般使用Gson生