POJOの特定のフィールドに配列を逆シリアル化することができるジャクソンの注釈はありますか?私はカスタムデシリアライザで簡単にこれを行うことができますが、私はクラスでこれをインラインで行うことを望んでいました。Jacksonは配列要素を特定のフィールドに逆シリアル化します
たとえば、次のJSONがElasticsearchから戻ってきます。
{
"_index": "twitter",
"_type": "tweet",
"_id": "AVodOsgk0etILSbJamY-",
"_score": null,
"_source": {
"tweetText": "I'm at Residencial Nova Alegria https:\/\/t.co\/4TyK8PAWzB",
"placeCountry": "Brasil",
"screenName": "wildelson",
"cleanedText": "I'm at Residencial Nova Alegria https:\/\/t.co\/4TyK8PAWzB",
"resolvedUrls": [
"https:\/\/www.swarmapp.com\/c\/gfULJdQ6umw"
],
"tweetId": "829272906291085314",
"tweetDate": 1486549042000
},
"sort": [
1486549042000,
"tweet#AVodOsgk0etILSbJamY-"
]
}
私のPOJOは、次のように:
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder(value = {
"enrichedStatus",
"sortValue",
"uid"
})
public class TweetHit {
private final EnrichedStatus enrichedStatus;
private final Long sortValue;
private final String uid;
public TweetHit(EnrichedStatus enrichedStatus, Long sortValue, String uid) {
this.enrichedStatus = enrichedStatus;
this.sortValue = sortValue;
this.uid = uid;
}
私はいつも長い列に[0]、配列内の文字列は、[1]、非直列化する必要があります「ソート」配列を、したいです
Long sortValue = sort[0]
String uid = sort[1]
唯一の回答はカスタムデシリアライザでしたが、できる限り回避したいと考えています。 Jackson: Deserialize JSON-Array in different attributes of an object
おそらく@JsonProperty("sort")
と@JsonFormat(shape = ARRAY)
を使用することができますが、特定のセルを指定して各フィールドにデシリアライズすることはできません。
メモこれは不変なオブジェクトなので、コンストラクタでインラインで作業するソリューションが必要になる可能性がありますが、最終的には削除し、空のコンストラクタを追加し、アノテーションをフィールドレベルに配置し、ジャクソンがフィールドに直接設定できる場合は、セッターを無効にしますか?
うわー、私はそれを見ていないと信じられない。私は2つのフィールド、2つのパラメータを持ってトンネルを見ている。これはうまくいった。ありがとう! – Brooks