下面是实体类
@Data
@Slf4j
public class LiveWaterVO implements Serializable {
private String name;
private Long level1;
private Long level2;
private Long level3;
private Long wl;
@JsonIgnoreProperties(ignoreUnknown = true)
private Long wlSixHoursAgo;
@JsonIgnoreProperties(ignoreUnknown = true)
private Long wlThreeHoursAgo;
@JsonIgnoreProperties(ignoreUnknown = true)
private Long wlOneHourAgo;
}
Maven依赖:
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.79</version>
</dependency>
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.5</version>
</dependency>
原来的JSON:
[{"wl":0.01,"name":"西桥","level1":"9","level3":"0.7","level2":"1.4"}]
进行下面的转换后:
List<LiveWaterVO> liveWaterVOS = jsonArray.toJavaList(LiveWaterVO.class);
log.info("{}", liveWaterVOS);
结果显示如下:
[LiveWaterVO(name=西桥, level1=9, level2=1, level3=0, wl=0, wlSixHoursAgo=null, wlThreeHoursAgo=null, wlOneHourAgo=null)]
这个Long的字段直接变成0了,经过debugger后发现关键代码在TypeUtils:
JavaBeanDeserializer javaBeanDeser = null;
ObjectDeserializer deserializer = config.getDeserializer(clazz);
if (deserializer instanceof JavaBeanDeserializer) {
javaBeanDeser = (JavaBeanDeserializer) deserializer;
}
if (javaBeanDeser == null) {
throw new JSONException("can not get javaBeanDeserializer. " + clazz.getName());
}
return (T) javaBeanDeser.createInstance(map, config);
难道我要定义一个Deserializer吗?
1条答案
按热度按时间fkaflof61#
The log doesn't show Long value because the previous json input is Float value rather than Long value