20240124

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 来自定义反序列化过程。

在进行了上述优化后,请确保重新构建并部署应用以使更改生效。同时,由于您的代码涉及数据库操作且使用了事务管理,确保在处理此类异常时能够正确回滚事务也是十分重要的。