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
、単に与えられた値とリターンを読み込みプロパティとカスタムデシリアライザをtrue
。Jackson
カスタムデシリアライザは、プロパティがペイロードに存在する場合にのみ起動します。
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}