Exception in thread "main" com.alibaba.fastjson.JSONException: parseLong error, field : id
at com.alibaba.fastjson.util.TypeUtils.castToJavaBean(TypeUtils.java:1569)
at com.alibaba.fastjson.util.TypeUtils.cast(TypeUtils.java:1127)
at com.alibaba.fastjson.JSON.toJavaObject(JSON.java:1236)
at com.zhongan.atlantis.cmdb.bundle.job.handle.AbstractCloudDOConvert.main(AbstractCloudDOConvert.java:31)
Caused by: com.alibaba.fastjson.JSONException: parseLong error, field : id
at com.alibaba.fastjson.serializer.LongCodec.deserialze(LongCodec.java:86)
at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:88)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.createInstance(JavaBeanDeserializer.java:1413)
at com.alibaba.fastjson.util.TypeUtils.castToJavaBean(TypeUtils.java:1567)
... 3 more
Caused by: com.alibaba.fastjson.JSONException: can not cast to long, value : 123s
at com.alibaba.fastjson.util.TypeUtils.castToLong(TypeUtils.java:908)
at com.alibaba.fastjson.serializer.LongCodec.deserialze(LongCodec.java:79)
... 6 more上面为复现演示代码:
public static void main(String[] args) {
com.alibaba.fastjson.JSONObject meta = new com.alibaba.fastjson.JSONObject();
meta.put("id", "123s");
TestDO javaObject = JSON.toJavaObject(meta, TestDO.class);
System.out.println("javaObject = " + javaObject);
}
@Data
public class TestDO {
private Long id;
}简单的就是fastjosn无容错机制。本着希望如果json中的数据类型与do中的数据类型不一致,直接忽略。
官方也有类似issues,但是并未支持
https://github.com/alibaba/fastjson/issues/854
解决方案,hutool工具可以支持
cn.hutool.json.JSONUtil.toBean(meta.toJSONString(), cls)
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.26</version>
</dependency>