记一次json 转换问题

329 阅读1分钟

报错信息

{"timestamp":"2022-07-12T08:52:13.502+00:00","status":400,"error":"BadRequest","message":"JSON parse error:Cannot deserialize value of type java.util.Datefrom String \"2022-07-31 00:00:00\": not a valid representatition (error:Failed to parse Date value '2022-07-31 00:00:00\": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSX', parsing fails(leniency? null)); nested exception is com.fasterxml.jackson.exc.InvalidFormatException: Cannot deserialize value of typejava.util.Date from String \"2022-07-31 00:00:00\": not a valid representation (error: Failed to pase date value '2022-07-31 00:00:00': Cannot parse date \:"2022-07-31 00:00:00": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSX', parsing fails (leniency? null)\n at [Source:(PushbackInputStream); line: 1, column: 236](through reference chain: com.nbcb.cpa.entity.dao.external.request.SeriesExtRequest["\couponList\"]->java.util.ArrayList[0]->com.nbcb.cpa.entity.dto.external.request.CouponAddExtRequest[\"endTime"\"])","path":"/base/series/add"}

问题原因

前后端的字符串格式不匹配

坑点

在网上搜索后 得知需要在指定字段前加注解

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

但是加了之后并不起作用

在f12 取到了request后发现插入数据库是缺少一个字段,当时也很疑惑怎么报的错还不一样呢

nested exception is java.sql.SQLIntegrityConstraintViolationException:ORA-01400: 无法将NULL插入("XXXDatabase", "XXXTable", "CreateUser")\n'

解决方法

等老大哥上班以后才知道 请求在进入服务前 有一个微服务进行了转发,缺少的字段也是在这个服务加入的

public class AClass(TargetRequest request){
    LoginUser loginUser = CacheUtil.getLoginUser();
    request.setCreateUser(loginUser.getUserId());
    XXXutil.doRequest(request)
}

所以解决方法需要在这个类里把对应的 字段也加上 @JsonFormat 就完成了