2017-07-21 2 views
0

HTTPリクエストから時間オブジェクトを取得しようとしています。それぞれが異なるクラスを生成する必要がある以下の要求が可能です。非常に異なる抽象クラス構造のSpring @JsonSubTypes

time: { 
    type: relative   | absolute, 
    value: string(eg:L24H) | {startTime: xxxx, endTime: xxxx} 
} 

typeに基づいて生成されたクラス。この部分が自明であることを願っています。 私は抽象的に以下の構造を作り、それを2つのクラスに分けました。最初の実装で

@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

クラスは次のようになります時間(適切なゲッターとセッター):

public class Time { 
    long startTime; 
    long endTime; 
} 

AbsoluteTimeRangeには何がありますか?

答えて

0

まだわからないなぜが動作しましたか?AbsoluteTimeRangeクラスにデフォルトのコンストラクタを追加する必要がありました。

誰かがさらに明確にできる場合は大歓迎です。