programing

Java에서 Jackson JSON 역직렬화 중 누락된 속성 무시

bestprogram 2023. 2. 26. 16:26

Java에서 Jackson JSON 역직렬화 중 누락된 속성 무시

이 예에서는

class Person {
   String name;
   int age;
}

JSON 개체에 누락된 속성 'age'가 있는 경우

{
    "name": "John"
}
Person person = objectMapper.readValue(jsonFileReader, Person.class);

을 던지다JsonMappingException역직렬화 할 수 없다면서역직렬화 중에 누락된 필드를 무시하는 주석이 있습니까?

@JsonIgnoreProperties(ignoreUnknown = true) 반에서 제 일을 해줬습니다.

네가 원하는 건

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

그게 잭슨 1.x 방식이에요.2.x에 새로운 방법이 있는 것 같아

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

이 명령어는 잭슨에게 늘이 아닌 값만 직렬화하도록 지시하며 결측값을 역직렬화할 때 불평하지 마십시오.그냥 자바 디폴트로 설정할 수 있을 것 같아요.

주석 기반 접근법은 무시하기 위한 더 나은 방법이지만 필요한 경우입니다.수동의 역직렬화 방법:

ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Person       person = mapper.readValue(jsonFileReader, Person.class);

잭슨 라이브러리의 최신 버전(2.9.6)은 기본적으로 누락된 작성자 속성을 무시합니다.단, ObjectMapper 설정이 다음과 같이 설정되어 있는 경우:

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

속성 중 하나가 누락된 경우 역직렬화 오류가 발생합니다.

int 대신 Integer를 사용하도록 클래스를 변경할 수도 있습니다.이 경우 잭슨은 null/missing "age" 값을 적절하게 처리합니다.주석을 사용하지 않는 대안을 찾는 사용자를 위해 이 답변을 추가합니다.

class Person {
   String name;
   Integer age;
}

탈직렬화에서는 두 가지 일이 발생할 수 있습니다.

Java Bean이 아닌 JSON String에 오브젝트 매퍼의 알 수 없는 속성되는 새로운 필드가 있습니다.알 수 없는 속성을 무시하려면 다음과 같이 개체 매퍼 구성을 구성해야 합니다.

ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

필드가 JSON String이 아닌 Java Bean에 있는 경우 해당 필드는 객체 매퍼에 의해 결측 속성으로 처리됩니다.누락된 속성에서 오류가 발생하지 않으려면 오브젝트 매퍼 구성을 다음과 같이 구성해야 하는데, 이는 잭슨 라이브러리의 Modern 버전(2.9.6)의 기본 동작입니다.

ObjectMapper().configure(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, false)

@JsonProperty(액세스=JsonProperty)로 에이징에 주석을 달 경우.Access.READ_ONLY)는 역직렬화 중에만 무시됩니다.

언급URL : https://stackoverflow.com/questions/20578846/ignore-missing-properties-during-jackson-json-deserialization-in-java