Jackson을 사용하여 JSON 개체의 새 필드 무시
Jackson JSON 라이브러리를 사용하여 일부 JSON 개체를 Android 응용 프로그램에서 POJO 클래스로 변환하고 있습니다.문제는 응용 프로그램이 게시되는 동안 JSON 개체가 변경되어 새 필드가 추가될 수 있지만 현재 단순 String 필드가 추가되어도 중단되므로 무시해도 됩니다.
잭슨에게 새로 추가된 필드를 무시하라고 할 수 있는 방법이 있나요?(예를 들어 POJO 오브젝트에 존재하지 않음)전 세계적으로 무시하면 좋을 것 같아요.
Jackson은 클래스 수준에서 사용할 수 있는 주석을 제공합니다(JsonIgnoreProperties).
클래스 맨 위에 다음 항목을 추가합니다(개별 메서드가 아님).
@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
...
}
사용하고 있는 Jackson 버전에 따라 현재 버전에서는 다른 Import를 사용해야 합니다.
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
이전 버전에서는 다음과 같습니다.
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
이미 설명한 2가지 메커니즘 외에 미지의(매핑되지 않은) 속성에 의해 발생하는 모든 장애를 억제하기 위해 사용할 수 있는 글로벌 기능도 있습니다.
// jackson 1.9 and before
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// or jackson 2.0
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
이것은 주석이 없을 때 사용되는 기본값이며 편리한 폴백이 될 수 있습니다.
잭슨 2의 최신 및 완전한 답변
주석 사용
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyMappingClass {
}
Jackson 온라인 설명서의 JsonIgnoreProperties를 참조하십시오.
설정 사용
주석보다 덜 거슬립니다.
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
ObjectReader objectReader = objectMapper.reader(MyMappingClass.class);
MyMappingClass myMappingClass = objectReader.readValue(json);
잭슨 온라인 문서의 FAIL_ON_UNKNOWN_PROPERTIES를 참조하십시오.
두 가지 방법으로 달성할 수 있습니다.
알 수 없는 속성을 무시하도록 POJO 표시
@JsonIgnoreProperties(ignoreUnknown = true)
다음과 같이 POJO/json을 시리얼화/직렬 해제하는 Object Mapper를 설정합니다.
ObjectMapper mapper =new ObjectMapper(); // for Jackson version 1.X mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); // for Jackson version 2.X mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
@JsonIgnoreProperties(ignoreUnknown = true)
7. jdk 1.7 Tomcat을 사용하는 Tomcat 어플리케이션이 있습니다.
JSON 응답에 기반한 pojo 클래스를 사용하는 경우.json이 자주 변경될 가능성이 있는 경우 pojo 클래스 수준에서 선언합니다.
@JsonIgnoreProperties(ignoreUnknown = true)
objectMapper에서 변환하는 경우 이 값을 추가합니다.
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
그 코드가 깨지지 않도록.
Jackson 버전 2.4 이후로는 몇 가지 변경 사항이 있습니다.현재 방법은 다음과 같습니다.
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
..........................................................................
ObjectMapper mapper = new ObjectMapper();
// to prevent exception when encountering unknown property:
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
주의: @notation 기반 솔루션은 그대로이므로 이 솔루션을 사용하려면 다른 답변을 참조하십시오.
For more information see the 10 minutes Configuration tutorial at:
https://github.com/FasterXML/jackson-databind
반드시 배치해 주세요.@JsonIgnoreProperties(ignoreUnknown = true)
JSON에서 Java Object로의 변환이 이루어지는 클래스가 아닌 JSON 응답을 해석한 결과로 입력하는 부모 POJO 클래스에 대한 주석.
위에서 설명한 바와 같이 주석은 부모 POJO 클래스에서 지정된 경우에만 기능하며 JSON에서 Java 개체로 변환되는 클래스가 아닙니다.
부모 클래스에 영향을 주지 않고 중단을 일으키지 않는 다른 방법은 필요한 매퍼 메서드에 대해서만 독자적인 매퍼 설정을 구현하는 것입니다.
또한 역직렬화 기능의 패키지도 이동되었습니다.디시리얼라이제이션 설정FAIL_ON_UNKNOWN_PROPERTIES to DiserializationConfig.특징.FAIL_ON_UNKNOWN_PROPERTIES
import org.codehaus.jackson.map.DeserializationConfig;
...
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Spring Boot 를 사용하고 있는 유저에게는, 를 사용해 잭슨의 디폴트 동작을 설정할 수 있습니다.Jackson2ObjectMapperBuilder
.
예를 들어 다음과 같습니다.
@Bean
public Jackson2ObjectMapperBuilder configureObjectMapper() {
Jackson2ObjectMapperBuilder oMapper = new Jackson2ObjectMapperBuilder();
oMapper.failOnUnknownProperties(false);
return oMapper;
}
그 후, 자동 배선을 실시할 수 있습니다.ObjectMapper
(디폴트로는 이 오브젝트매퍼는 http 콘텐츠 변환에도 사용됩니다).
jackson-xx 2.8.5를 사용하고 있습니다.Maven 의존관계:
<dependencies>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.5</version>
</dependency>
</dependencies>
첫째, 알 수 없는 속성을 전체적으로 무시하려면 다음과 같이 하십시오.를 설정할 수 있습니다.ObjectMapper
.
다음과 같습니다.
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
일부 클래스를 무시하려면 주석을 추가할 수 있습니다.@JsonIgnoreProperties(ignoreUnknown = true)
당신의 수업에서 다음과 같이
@JsonIgnoreProperties(ignoreUnknown = true)
public class E1 {
private String t1;
public String getT1() {
return t1;
}
public void setT1(String t1) {
this.t1 = t1;
}
}
@JsonIgnore를 사용하여 POJO의 특정 속성에 주석을 달 수 있습니다.
언급URL : https://stackoverflow.com/questions/5455014/ignoring-new-fields-on-json-objects-using-jackson
'sourcecode' 카테고리의 다른 글
별도의 비 Vue 컴포넌트인 JavaScript/TypeScript 파일에서 Vuex 상태에 액세스하는 방법 (0) | 2022.07.17 |
---|---|
Vue - 플러그인이 준비되면 vue 마운트 (0) | 2022.07.17 |
vuej를 사용하여 설치 가능한 PWA를 만드는 방법 (0) | 2022.07.17 |
개발 모드에서 이 HTML 템플릿을 컴파일하는 데 Vue가 매우 느림 (0) | 2022.07.17 |
스프링 컨트롤러에서 파일 다운로드 (0) | 2022.07.17 |