java - 如何实现 Java 8 LocalTimeDeserializer?
问题描述
我一直在寻找使用杰克逊 API 的 LocalTimeDeserializer 类实现自定义反序列化器。
但是,在使用此类实际反序列化属性时,我遇到了错误。
com.fasterxml.jackson.databind.JsonMappingException:类 com.dspim.api.common.LocalTimeWithStringDeserializer 没有默认(无 arg)构造函数
我正在使用下面的自定义实现在 bean 类中进行反序列化。
@JsonProperty @JsonDeserializer(using=LocalTimeWithStringDeserializer.class) private LocalTime packaging_time; //它将保持时间值,即 13:24 (01:24 PM)。
我已经实现了反序列化器类,如下所示。
package com.testapp.test;
import java.io.IOException;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
public class LocalTimeWithStringDeserializer extends com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer{
public LocalTimeWithStringDeserializer(DateTimeFormatter formatter) {
super(formatter);
}
private static final long serialVersionUID = 1L;
@Override
public LocalTime deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException,
JsonProcessingException {
return LocalTime.parse(jp.getText());
}
}
父类中的默认构造函数(不带参数)是私有的,因此当我收到编译时错误时,我无法将默认构造函数(不带参数)添加到我的类实现中。
请为此问题提出解决方案。
请注意:我有两个不同的客户端项目(相互依赖添加到类路径中),由于依赖版本冲突,我无法使用内置的 Jackson 反序列化器,这就是我被迫使用自定义反序列化器的原因。
解决方案
如果父类有一个私有的无参数构造函数,那并不禁止你自己有一个无参数的构造函数:
public class LocalTimeWithStringDeserializer extends com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer{
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd");
public LocalTimeWithStringDeserializer() {
super(formatter);
}
// ...
}
推荐阅读
- bi-publisher - 如何使用包体中的 ORACLS EBS xmlreport 参数?
- php - 在保持用户登录的同时刷新所有会话变量 - Laravel 5
- css - 在 CSS 中正确制作具有嵌套跨度的列表响应
- java - 当子方法中抛出异常时,事务不会回滚 - Spring
- django - 根据先前的字段选择过滤表单中的选择 - Django
- wxwidgets - WxChoice 项目在 Windows 10 中略有重叠
- java - 通过仪器测试重新启动 Android 设备并在重新启动后继续测试
- node.js - 如何从nodejs express.js中的一个用户帐户管理多个登录的正确方法是什么?
- javascript - javasvript中的多选过滤器
- wso2 - 如何在同一台服务器上为 WSO2 IS + EI + BPS 集群配置 Nginx 负载均衡器?