私はPOJOをMongoDBに格納するWebサービスを扱っています。私はMongoの 'expireAfterSeconds'時間を使って、特定の期間の後に私のコレクション内の古い文書をクリアする機能を使いたいと思っています。上記のコードは、コレクション内の文書を作成し、以下の注釈で、文書を削除Jackson @JsonCreatorで注釈が付けられたコンストラクタはPOJOで呼び出されませんか?
{ "testIndex": "testIndex", "name": "hello", "date": "2016-05-09T11:00:39.639Z" }
:
は当初、私は、次のJSONを使用してRESTサービスに日付を送っ実装を持っていました10秒後に。
@Indexed (expireAfterSeconds=10)
private Date date;
は、このコードを実装した後、私は次のようにJSONが今ある意味、私はJava側で日付を生成したいことを決めた:
{ "testIndex": "testIndex", "name": "hello" }
そして、私はコンストラクタを持っていますドキュメントhereを読んでから、ジャクソン
@JsonCreator
public TTLTestVO (@JsonProperty("testIndex") String testIndex, @JsonProperty("name") String name) {
this.testIndex = testIndex;
this.createdAt = new Date();
this.name = name;
}
からJsonCreatorを使用してPOJOは、私は、これはフラグのconstをすべきと考えています新しいオブジェクトを作成するときに使用されるructor。以前と同じように、testIndexフィールドとnameフィールドに値が設定されます。しかし、この実装では、私のmongoでドキュメントをチェックするたびに、日付の値は 'null'です。文字列値の文字列を「コンストラクタからhello」に変更すると、JSONに含まれる最初のテキストがデータベースに追加されるため、コンストラクタは呼び出されないように見えます。
POJO
`
@Document(コレクション= "テスト")publicクラスTTLTestVO {いくつかは、より多くの私は問題を発見し調査した後
@Id private String _id;
@Indexed
private String testIndex;
@Indexed (expireAfterSeconds=10)
private Date createdAt;
private String name;
@JsonIgnore
public TTLTestVO() {
// default
}
@JsonCreator
public TTLTestVO (@JsonProperty("testIndex") String testIndex, @JsonProperty("name") String name) {
this.testIndex = "hello from the constructor";
this.name = name;
}
public String getId() {
return _id;
}
public void setId(String _id) {
this._id = _id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTestIndex() {
return testIndex;
}
public void setTestIndex(String testIndex) {
this.testIndex = testIndex;
}
public Date getDate() {
return createdAt;
}
public void setDate(Date date) {
this.createdAt = date;
}
`