Spring Mvc使用Jackson进行json转对象时,遇到的字符串转日期的异常处理(JSON parse error: Can not deserialize value of type java.util.Date from String)

1.问题排查

- 项目配置

  • springboot 2.1
  • maven配置jackson

- 出现的场景:

  • 服务端通过springmvc写了一个对外的接口,查询数据中的表,表中有一个字段属性是时间戳,返回一个json字符串,其中该json带有日期,格式为yyyy-MM-dd HH:mm:ss
  • 客户端调用该http接口,指定返回值为一个Vo,Vo中日期的字段为Date类型
  • 客户端调用该接口后抛异常了。报错信息如下:
feign.codec.DecodeException: JSON parse error: Can not deserialize value of type java.util.Date from String "2018-03-07 16:18:35": not a valid representation (error: Failed to parse Date value ‘2018-03-07 16:18:35‘: Can not parse date "2018-03-07 16:18:35Z": while it seems to fit format ‘yyyy-MM-dd‘T‘HH:mm:ss.SSS‘Z‘‘, parsing fails (leniency? null)); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type java.util.Date from String "2018-03-07 16:18:35": not a valid representation (error: Failed to parse Date value ‘2018-03-07 16:18:35‘: Can not parse date "2018-03-07 16:18:35Z": while it seems to fit format ‘yyyy-MM-dd‘T‘HH:mm:ss.SSS‘Z‘‘, parsing fails (leniency? null))

2.解决方法

因为数据库中存在一个create_time字段,属性是timestamp,服务器端查询数据库并把字段映射到定义的Vo中出现了格式问题,所以在Vo中把createTime添加@JsonFormat注释就可以完成时间字段映射的格式问题。

@JsonFormat( pattern="yyyy-MM-dd HH:mm:ss")
  private Date createTime;  

3.报异常的原因

参考:https://blog.csdn.net/qq906627950/article/details/79503801

这篇博客可以了解底层报错的原因。

原文地址:https://www.cnblogs.com/liaoguanwang/p/9795195.html

时间: 2024-10-10 02:57:37

Spring Mvc使用Jackson进行json转对象时,遇到的字符串转日期的异常处理(JSON parse error: Can not deserialize value of type java.util.Date from String)的相关文章

JSON parse error: Cannot deserialize value of type `java.util.Date` from String

DateTimePicker + @DateTimeFormat("yyyy-MM-dd HH:mm:ss")日期格式转换异常 最近在做的一个项目使用的日期格式是yyyy-MM-dd HH:mm:ss格式的,在后端Java与MySQL这边的转换中一开始格式没有统一间歇性的就会报异常,后面采用了一个@DateTimeFormat("yyyy-MM-dd HH:mm:ss")注解标注在属性上规范了 Date 类型属性的格式(埋坑~) 在前端这边使用的是ElementUI

spring mvc出现 Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'endtime'

在使用spring mvc中,绑定页面传递时间字符串数据给Date类型是出错: Failed to convert property value of type [java.lang.String] to required type [java.util.Date] for property 'expert.birthdate'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of typ

将java.util.Date类型转换成json时,使用JsonValueProcessor将date转换成希望的类型

将java.util.Date类型转换成json时,使用JsonValueProcessor将date转换成希望的类型 问题描述: java里面时间类型转换成json数据就成这样了:"createTime":{"date":30,"day":3,"hours":15,"minutes":14,"month":3,"nanos":0,"seconds"

spring mvc 控制器方法传递一些经验对象的数组

由于该项目必须提交一个表单,其中多个对象,更好的方法是直接通过在控制器方法参数的数组. 因为Spring mvc框架在反射生成控制方法的參数对象的时候会调用这个类的getDeclaredConstructor方法来获得构造函数, 可是一直报NoSuchMethodException的异常. 依据这种方法的jdk文档,这个类是一个数组对象时,这种方法会抛出java.lang.NoSuchMethodException,由于接口.数组类.void.基本类型没有构造函数. 同事后来给我支了两招,使用A

springmvc json转对象时日期转化

spring mvc 默认用的是 jackson 来解析 json 的,所以 Date 的解析得下面这么用 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date lastupdatetime; 如果是@RequestParam则用这种方式: @ResponseBody    @RequestMapping(method = RequestMethod.POST, v

EF中Json序列化对象时检测到循环引用的解决办法

第一种方法:使用Newtonsoft.Json中的方法注释,在Json序列化的时候忽略导航属性 例:using Newtonsoft.Json; public class Users { public int Id { get; set; } public string LoginId { get; set; } public string LoginPwd { get; set; } [JsonIgnore] public virtual ICollection Roles { get; se

javascript内置对象(数组、字符串、日期)

javascript基于对象的语言,由不同的对象,组成的编程语言. 数组对象.数值对象.字符串对象.日期对象.数学对象.正则表达式.DOM对象.BOM对象.事件对象 数组对象的常用方法: length:获得数组的元素个数 concat():合并数组生成一个新数组 1 <script type="text/javascript"> 2 var arr1 = ['吃饭','睡觉']; 3 var arr2 = ['喝水','挠头']; 4 console.log(arr1.co

spring mvc表单自动装入实体对象

<form action="/springmvc1/user/add" method="post"> id: <input type="text" name="id"><br> 姓名:<input type="text" name="name"/><br> 密码:<input type="text" n

【玩转Golang】 自定义json序列化对象时,非法字符错误原因

由于前台web页面传来的日期对象是这样的格式“2010-11-03 15:23:22”,所以我安装网上查来的办法,自定义包装了time.Time对象,实现自己的Marshal和UnMarshal方法 type DateTime struct { time.Time } const ctLayout = "2006-01-02 15:04:05" const ctLayout_nosec = "2006-01-02 15:04" const ctLayout_date