我试图从HTTP请求中接收时间对象。以下请求是可能的,每个请求都应生成不同的类。
time: {
type: relative | absolute,
value: string(eg:L24H) | {startTime: xxxx, endTime: xxxx}
}
根据type
生成的类。希望这部分是自我解释的。
我用一个抽象创建了以下结构,并使两个类扩展了它。
@JsonTypeInfo(
use =Id.NAME,
include = As.PROPERTY,
property = "type",
visible = true
)
@JsonSubTypes({
@JsonSubTypes.Type(value = RelativeSearchTimeRange.class, name = "relative"),
@JsonSubTypes.Type(value = AbsoluteSearchTimeRange.class, name = "absolute")
})
public abstract class SearchTimeRange<V> {
private String type;
private V value;
private Time time;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}
}
在第一次实施中正常工作:
public class RelativeSearchTimeRange extends SearchTimeRange<RelativeSearchTimeRange.RelativeTime> {
enum RelativeTime {
L24H, L3D;
}
private RelativeTime value;
@Override public void setValue(RelativeTime value) {
this.value = value;
}
@Override public RelativeTime getValue() {
return value;
}
但第二个失败了:
public class AbsoluteSearchTimeRange extends SearchTimeRange<AbsoluteSearchTimeRange> {
private Time value;
public void setValue(Time value) {
this.value = value;
}
public AbsoluteSearchTimeRange(Long startTime, Long endTime) {
value = new Time(startTime, endTime);
}
@Override public Time getTime() {
return value;
}
}
错误:Could not read document: Can not construct instance of io.redlock.common.dal.AbsoluteSearchTimeRange, problem: null
Time类看起来像这样(有适当的getter和setter):
public class Time {
long startTime;
long endTime;
}
AbsoluteTimeRange
中缺少什么?
答案 0 :(得分:0)
我仍然不确定为什么它有效,但我必须在AbsoluteTimeRange
类中添加默认构造函数。
如果有人能够进一步澄清,那么最受欢迎。