web-dev-qa-db-ja.com

Java

例では

class Person {
   String name;
   int age;
}

JSONオブジェクトにプロパティ 'age'がない場合、

{
  name : John
}

Person person = objectMapper.readValue(jsonFileReader, Person.class);

デシリアライズできないことを示すJsonMappingExceptionをスローします。逆シリアル化中に不足しているフィールドを無視するannotationがありますか?

ありがとう

40
user379151

あなたが欲しいのは

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class Person {
  ...
}

それがジャクソン1.xのやり方です。 2.xには新しい方法があると思います。何かのようなもの

@JsonInclude(Include.NON_NULL)
public class Person {
  ...
}

これらはnullではない値のみをシリアル化するようにJacksonに指示し、欠損値をシリアル化解除するときに文句を言いません。 Javaデフォルトに設定するだけだと思います。

46
pedorro

@JsonIgnoreProperties(ignoreUnknown = true) クラスレベルで私のために働いた。

75
Gustavo Matias

注釈ベースのアプローチは、必要に応じて無視するためのより良い方法です。デシリアライゼーションの手動方法:

ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Person       person = mapper.readValue(jsonFileReader, Person.class);
22
Fırat KÜÇÜK

Jacksonライブラリの最新バージョン(2.9.6)は、デフォルトでは、欠落しているクリエータープロパティを無視します。ただし、ObjectMapper構成が次のように設定されている場合:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, true);

次に、プロパティの1つが欠落している場合、逆シリアル化エラーが発生します。

4
Moisés

@JsonIgnoreアノテーションを使用したいと思うと思います。 https://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonIgnore.html

1
drembert