jackson parseObject 命名不规范导致的反序列化问题 UnrecognizedPropertyException

437 阅读1分钟

JSON 数据:

{
	"fSec": 22.100000
}

类:

@Data
public static class DataInfo {
    @JsonAlias("fSec")
    private float fSec;
}

异常

使用 jaskson 的 parseObject 时,出现报错:

Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "fSec" (class com.fosafer.dto.SqdValidLenDTO$DataInfo), not marked as ignorable (one known property: "fsec"])

原因

由于字段命名不规范且使用了 lombok 插件,lombok 生成的get、set方法为:

getFSec();
setFSec();

jackson 在获取 set 方法反解析字段时,解析出的字段为:fses,于是出现:

field "fSec" (class com.fosafer.dto.SqdValidLenDTO$DataInfo), not marked as ignorable (one known property: "fsec"]

解决方案

  • 使用 IDEA 手动生成get、set:
public void setfSec(float fSec) {
    this.fSec = fSec;
}
  • 添加别名注解
@JsonAlias("fSec") 
private float fSec;