Sıfır değerler, yazılım geliştirmede ve uygun şekilde ele alınmasında çok fazla ortaya çıkar. null
değerler başlı başına bir bilime dönüştürülebilir. Jackson, Java nesnelerinin serileştirilmesi ve seri durumdan çıkarılması için fiili kitaplıktır ve ortak bir senaryo, null
alanları.
Bu kısa eğitimde, bir POJO'yu Jackson ile serileştirirken boş alanları nasıl yok sayabileceğinize bir göz atacağız.
ObjectMapper Ayarlarını Değiştirme
Jackson'ın ObjectMapper'ı, nesneleri serileştirilmiş değerlere eşleyen merkezi API'dir. Doğal olarak, çeşitli bayraklar aracılığıyla çalışma şeklini ayarlayabilir ve özelleştirebilirsiniz, bunlardan biri:
objectMapper.setSerializationInclusion(Include.NON_NULL);
Bu eşleştiriciyle seri hale getirirken, özellikler yalnızca boş değilse dahil edilir.
Bu bayrağı ayarlar küresel ile seri hale getirilen herhangi bir nesne için objectMapper
misal. Spring Boot ile çalışıyorsanız ve güvendiği ObjectMapper açıkta değilse, bayrağı değiştirebilirsiniz. application.properties
Dosya:
spring.jackson.default-property-inclusion = non_null
Veya, kullanıyorsanız application.yml
:
spring:
jackson:
default-property-inclusion: non_null
Not: Spring'in eski sürümleri kullanıldı spring.jackson.serialization-inclusion=non_null
yerine spring.jackson.default-property-inclusion=non_null
.
Alternatif olarak, varsayılanı değiştirebilirsiniz. ObjectMapper
örneğin yeni bir kayıt yaparak @Primary
@Bean
adlı objectMapper()
varsayılan uygulamayı geçersiz kılan ve serileştirme ve seri durumdan çıkarma sırasında varsayılan olarak kullanılacak örnek üzerinde tam özelleştirmeye izin veren :
@Bean
@Primary
public ObjectMapper objectMapper() {
return new ObjectMapper()
.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
Bu @Bean
girmeli herhangi bir dosya bu ile açıklamalı @Configuration
ek açıklama ve çoğu zaman özel bir yapılandırma sınıfında veya Spring Boot uygulamasının ana sınıfında bulunur.
Jackson2ObjectMapperBuilder Örneğini Değiştirme
Bahar kullanır HttpMessageConverters
HTTP mesajları ve nesneler arasında dönüştürmek için. Varsayılan dönüştürücüler, ObjectMapper
ve XmlMapper
aracılığıyla somutlaştırılan örnekler Jackson2ObjectMapperBuilder
.
Birincil bilgileri manuel olarak sağlamak yerine ObjectMapper
(oluşturucu tarafından sağlananın yerine), Spring'e talimat verebilirsiniz. nasıl inşa edilir bunun yerine nesne eşleyicisi. Bu, Spring'in üst düzey yapılandırmalarını, alt düzey nesnelerle kurcalamanıza gerek kalmadan, yine de çalışma şeklini özelleştirirken yapmasına olanak tanır. Ek olarak, ayrıca özelleştirebilirsiniz XmlMapper
bu şekilde tek seferde.
Oluşturucuyu özelleştirmek için yeni bir @Bean
of Jackson2ObjectMapperBuilderCustomizer
oluşturucuyu özelleştiren ve döndüren tür:
@Bean
public Jackson2ObjectMapperBuilderCustomizer customBuilder() {
return builder -> {
builder.serializationInclusion(JsonInclude.Include.NON_NULL);
}
}
@JsonInclude Ek Açıklama
Yelpazenin diğer ucunda, düşük kodlu bir alternatif olarak ek açıklamaları kullanabiliriz! Açıklamalar, sınıf düzeyinde veya yöntem düzeyinde uygulanabilir:
@JsonInclude(JsonInclude.Include.NON_NULL)
Bu, nesne eşleyicinin genel davranışı yerine yalnızca belirli sınıfları özelleştirmenize olanak tanır.
En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!
Not: Jackson 2.0'dan itibaren, açıklamanın değeri JsonInclude.Include.NON_NULL
. Daha önceki sürümler için şunu kullanın: include=JsonSerialize.Inclusion.NON_NULL
.
@JsonInclude Sınıf Düzeyinde
Ne zaman başvurursun @JsonInclude
sınıf düzeyinde, açıklama tüm alıcıları ve ayarlayıcıları kapsar:
@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;
}
olan herhangi bir alan null
değer serileştirilmeyecek.
@JsonInclude Yöntem Düzeyinde
Alternatif olarak, açıklamayı en ayrıntılı seçenek olarak yöntem düzeyinde uygulayabilirsiniz:
@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;
}
Bu snippet'te - ek açıklama yalnızca TransactionType
alan.
Sonuç
Bu kılavuzda, Java ve Spring Boot ile Jackson'daki boş alanları nasıl yok sayacağınızı öğrendiniz. Bu, küresel olarak elde edilebilir, altta yatan örtük ObjectMapper
örnek ve kaydettiğiniz yeni birincil fasulye davranışını özelleştirme.
Alternatif olarak, özelleştirebilirsiniz Jackson2ObjectMapperBuilder
bu inşa eder ObjectMapper
zaten oluşturulmuş olanı değiştirmek yerine uygulamanız için. Düşük kodlu bir çözüm için - değiştirebilirsiniz. spring.jackson.default-property-inclusion
özellik dosyalarınızdaki mülk.
Son olarak - kullanabilirsiniz @JsonInclude
sınıf düzeyinde veya yöntem düzeyinde açıklama.