20240124
ccnaive 2024/1/24
# 1 实体类字段不一致 entity
今天看一个很久老项目日志时,发现有一个定时任务报错了,打debug发现发送方多发了几个字段过来了,
"videoClipstimeSegment"]->java.util.ArrayList[0]->com.dataojo.huhehaotebasic.model.master.entity.VideoClipstimeSegment["beginTime"])
因为我接收的时候没有这些字段就报错了
问题出在JSON反序列化过程中,VideoClipstimeSegment 类型的对象包含了 "beginTime" 属性,而这个属性在对应的 Java 类中并未定义(已知的属性有 "from", "to", "type")。为了解决这个问题,您可以采取以下几种方式:
# 更新 VideoClipstimeSegment 类
如果您控制了 VideoClipstimeSegment 类的源代码,那么可以在其中添加一个与 JSON 对应的 "beginTime" 字段,并提供其 getter 和 setter 方法。
Java
1public class VideoClipstimeSegment {
2 private Long from;
3 private Long to;
4 private Integer type;
5 // 添加 beginTime 字段
6 private Long beginTime;
7 private Long endTime;
8 private String flag;
9
10 // getter 和 setter 方法...
11}
# 忽略未知属性 @JsonIgnoreProperties(ignoreUnknown = true)
如果不想在类中添加 "beginTime" 字段,可以使用 Jackson 的 @JsonIgnoreProperties 注解来忽略未知属性。
Java
1import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
2
3@JsonIgnoreProperties(ignoreUnknown = true)
4public class VideoClipstimeSegment {
5 // ...
6}
# 自定义反序列化逻辑
如果需要更复杂的处理,比如将 "beginTime" 映射到已存在的某个字段上,可以通过实现 JsonDeserializer 或重写 @JsonCreator 来自定义反序列化过程。
在进行了上述优化后,请确保重新构建并部署应用以使更改生效。同时,由于您的代码涉及数据库操作且使用了事务管理,确保在处理此类异常时能够正确回滚事务也是十分重要的。