【Fastjson】Fastjson2 在不同 Modules 模块包下,@JSONField name映射无法反序列化的 BUG 及解决
问题:在使用 alibaba fastjson2 做 @JSONField 字段名映射时,在同模块包下 Flink Jar 任务正常映射,本地测试正常映射,但是将两个模块包上传至 Flink Cluster 之后,出现反序列化异常,子模块无法反序列化父模块中的 Bean Class 对象名,返回对应字段值 null。
<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.58</version>
</dependency>
原因:fastjson2 拥有更安全的模式,推测原因可能是不支持挎包反序列化不同的变量命名映射,但同包下支持,来保证开发字段命名规范的一致性。
解决:更换继续使用 com.alibaba.fastjson。解决挎包,@JSONField name 映射 BUG
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.58</version>
</dependency>
父模块写法:
import com.alibaba.fastjson.annotation.JSONField;
import lombok.*;@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Student {private Integer id;private String name;@JSONField(name = "phone_number")private String phoneNumber;@JSONField(name = "age_years")private Integer ageYears;}