ジャクソンは、特定のプロパティを無視しますが、チェックすることができ、それはavailbleでいました

micobg:

直列化復元ではなく、彼らが提示したりしていない知っていると同時に、いくつかのプロパティをスキップする方法はありますか?

{
    "id": 123,
    "name": "My Name",
    "picture": {
        // a lot of properties that's not important for me
    }
}
@JsonIgnoreProperties(ignoreUnknown=true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
    private int id;
}

だから、私はignoreUnknown、私はしたくないので、私はデフォルトの動作として望むものであるnameフィールドと存在できる他のすべてのフィールドを。pictureフィールドも重要ではありません。私はちょうどだったかを知りたいpicture利用可能かどうかプロパティ。どのように私はそれを行うことができますか?

マイケルZiober:

あなたは追加することができboolean、単に与えられた値とリターンを読み込みプロパティとカスタムデシリアライザをtrueJacksonカスタムデシリアライザは、プロパティがペイロードに存在する場合にのみ起動します。

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

import java.io.File;
import java.io.IOException;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./src/main/resources/test.json");
        ObjectMapper mapper = new ObjectMapper();
        System.out.println(mapper.readValue(jsonFile, User.class));
    }
}

class PropertyExistsJsonDeserializer extends JsonDeserializer<Boolean> {
    @Override
    public Boolean deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        p.readValueAsTree(); //consume value
        return Boolean.TRUE;
    }
}

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
class User {
    private int id;

    @JsonDeserialize(using = PropertyExistsJsonDeserializer.class)
    @JsonProperty("picture")
    private boolean pictureAvailable;

    //getters, setters, toString
}

上記のコードを印刷:

User{id=123, pictureAvailable=true}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=364386&siteId=1