Java 및 Spring Boot에서 Jackson의 Null 필드 무시

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 메시지와 객체 사이를 변환합니다. 기본 변환기는 ObjectMapperXmlMapper 를 통해 인스턴스화된 인스턴스 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 클래스 수준 또는 메서드 수준의 주석.

타임 스탬프 :

더보기 스택카부스