Null 값은 소프트웨어 개발 및 적절한 처리에서 많이 발생합니다. null
가치는 그 자체로 과학으로 바뀔 수 있습니다. Jackson은 Java 객체의 직렬화 및 역직렬화를 위한 사실상의 라이브러리이며 일반적인 시나리오는 null
분야.
이 짧은 자습서에서는 Jackson으로 POJO를 직렬화할 때 null 필드를 무시하는 방법을 살펴보겠습니다.
ObjectMapper 설정 변경
Jackson의 ObjectMapper는 객체를 직렬화된 값에 매핑하는 중앙 API입니다. 당연히 다양한 플래그를 통해 작동 방식을 조정하고 사용자 지정할 수 있습니다. 그 중 하나는 다음과 같습니다.
objectMapper.setSerializationInclusion(Include.NON_NULL);
이 매퍼로 직렬화할 때 속성은 null이 아닌 경우에만 포함됩니다.
이것은 플래그를 설정합니다 세계적으로 직렬화되는 모든 객체에 대해 objectMapper
사례. Spring Boot로 작업 중이고 의존하고 있는 ObjectMapper가 노출되지 않은 경우 다음에서 플래그를 변경할 수 있습니다. application.properties
파일 :
spring.jackson.default-property-inclusion = non_null
또는 사용 중인 경우 application.yml
:
spring:
jackson:
default-property-inclusion: non_null
참고 : 이전 버전의 Spring 사용 spring.jackson.serialization-inclusion=non_null
대신 spring.jackson.default-property-inclusion=non_null
.
또는 기본값을 대체할 수 있습니다. ObjectMapper
인스턴스를 새로 등록하여 @Primary
@Bean
라는 objectMapper()
기본 구현을 재정의하고 직렬화 및 역직렬화할 때 기본적으로 사용되는 인스턴스에 대한 전체 사용자 정의를 허용합니다.
@Bean
@Primary
public ObjectMapper objectMapper() {
return new ObjectMapper()
.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
이 @Bean
들어가야 한다 모든 파일 로 주석이 달린 @Configuration
주석이며 종종 특수 구성 클래스 또는 Spring Boot 애플리케이션의 기본 클래스에 위치합니다.
Jackson2ObjectMapperBuilder 인스턴스 변경
스프링은 다음을 사용합니다. HttpMessageConverters
HTTP 메시지와 객체 사이를 변환합니다. 기본 변환기는 ObjectMapper
및 XmlMapper
를 통해 인스턴스화된 인스턴스 Jackson2ObjectMapperBuilder
.
기본 정보를 수동으로 제공하는 대신 ObjectMapper
(빌더가 제공한 것을 대체), Spring에 지시할 수 있습니다. 구축 방법 대신 개체 매퍼. 이를 통해 Spring은 하위 레벨 객체를 변경하지 않고도 상위 레벨 구성을 수행할 수 있으며 여전히 작동 방식을 사용자 정의할 수 있습니다. 또한 사용자 정의할 수도 있습니다. XmlMapper
한 번에 이렇게.
빌더를 사용자 정의하려면 새 @Bean
of Jackson2ObjectMapperBuilderCustomizer
빌더를 사용자 정의하고 반환하는 유형:
@Bean
public Jackson2ObjectMapperBuilderCustomizer customBuilder() {
return builder -> {
builder.serializationInclusion(JsonInclude.Include.NON_NULL);
}
}
@JsonInclude 주석
스펙트럼의 다른 쪽 끝에서 로우 코드 대안으로 주석을 사용할 수 있습니다! 주석은 클래스 수준 또는 메서드 수준에서 적용할 수 있습니다.
@JsonInclude(JsonInclude.Include.NON_NULL)
이를 통해 개체 매퍼의 전역 동작 대신 특정 클래스만 사용자 지정할 수 있습니다.
모범 사례, 업계에서 인정하는 표준 및 포함된 치트 시트가 포함된 Git 학습에 대한 실습 가이드를 확인하십시오. 인터넷 검색 Git 명령을 중지하고 실제로 배움 이것!
참고 : Jackson 2.0부터 주석 값은 다음과 같습니다. JsonInclude.Include.NON_NULL
. 이전 버전의 경우 다음을 사용하십시오. include=JsonSerialize.Inclusion.NON_NULL
.
클래스 수준의 @JsonInclude
신청할 때 @JsonInclude
클래스 수준에서 주석은 모든 getter 및 setter로 확장됩니다.
@Entity(name="property")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Property implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private String id;
@Column(name="transaction_type")
private TransactionType transactionType;
@Column(name="property_type")
private PropertyType propertyType;
}
다음이 있는 지정된 필드 null
값이 직렬화되지 않습니다.
메서드 수준의 @JsonInclude
또는 메서드 수준에서 가장 세분화된 옵션으로 주석을 적용할 수 있습니다.
@Entity(name="property")
public class Property implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private String id;
@Column(name="transaction_type")
@JsonInclude(JsonInclude.Include.NON_NULL)
private TransactionType transactionType;
@Column(name="property_type")
private PropertyType propertyType;
}
이 스니펫에서 주석은 TransactionType
입력란입니다.
결론
이 가이드에서는 Java 및 Spring Boot를 사용하여 Jackson에서 null 필드를 무시하는 방법을 배웠습니다. 이것은 기본 암시적을 대체하여 전역적으로 달성할 수 있습니다. ObjectMapper
인스턴스를 만들고 등록한 새 기본 빈의 동작을 사용자 정의합니다.
또는 사용자 정의할 수 있습니다. Jackson2ObjectMapperBuilder
구축 ObjectMapper
이미 구축된 애플리케이션을 대체하는 대신 애플리케이션에 사용할 수 있습니다. 로우 코드 솔루션의 경우 – 다음을 변경할 수 있습니다. spring.jackson.default-property-inclusion
속성 파일의 속성.
마지막으로 – 다음을 사용할 수 있습니다. @JsonInclude
클래스 수준 또는 메서드 수준의 주석.