نادیده گرفتن فیلدهای پوچ با جکسون در جاوا و Spring Boot

مقادیر تهی در توسعه نرم افزار و مدیریت صحیح آن بسیار به وجود می آیند null ارزش ها را می توان به خودی خود به علم تبدیل کرد. جکسون یک کتابخانه واقعی برای سریال سازی و سریال سازی اشیاء جاوا است – و یک سناریوی رایج مربوط به سریال سازی اشیاء است که دارای null زمینه.

در این آموزش کوتاه، به نحوه نادیده گرفتن فیلدهای تهی هنگام سریال سازی یک POJO با جکسون خواهیم پرداخت.

تغییر تنظیمات ObjectMapper

Jackson's ObjectMapper API مرکزی است که اشیاء را به مقادیر سریال نگاشت می کند. به طور طبیعی، شما می توانید نحوه کار آن را از طریق پرچم های مختلف تنظیم و سفارشی کنید که یکی از آنها عبارت است از:

objectMapper.setSerializationInclusion(Include.NON_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 Annotation

در طرف دیگر طیف، می توانیم از حاشیه نویسی، به عنوان جایگزین کم کد استفاده کنیم! حاشیه نویسی ها را می توان در سطح کلاس یا سطح روش اعمال کرد:

@JsonInclude(JsonInclude.Include.NON_NULL)

این به شما این امکان را می دهد که به جای رفتار سراسری شی نگاشت، فقط کلاس های خاصی را سفارشی کنید.

راهنمای عملی و عملی ما برای یادگیری Git را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google Git را متوقف کنید و در واقع یاد گرفتن آی تی!

توجه داشته باشید: از جکسون 2.0، ارزش حاشیه نویسی است JsonInclude.Include.NON_NULL. برای نسخه های قبلی، استفاده کنید include=JsonSerialize.Inclusion.NON_NULL.

@JsonInclude در سطح کلاس

وقتی اقدام کردید @JsonInclude در سطح کلاس، حاشیه نویسی به همه گیرندگان و تنظیم کننده ها گسترش می یابد:

@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 در Method-Level

همچنین، می توانید حاشیه نویسی را در سطح متد به عنوان گرانول ترین گزینه اعمال کنید:

@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 رشته.

نتیجه

در این راهنما، نحوه نادیده گرفتن فیلدهای پوچ در جکسون، با جاوا و Spring Boot را آموخته اید. این را می توان در سطح جهانی به دست آورد و جایگزین امر ضمنی اساسی شود ObjectMapper نمونه و سفارشی کردن رفتار لوبیای اولیه جدیدی که ثبت می کنید.

از طرف دیگر، می توانید آن را سفارشی کنید Jackson2ObjectMapperBuilder که می سازد ObjectMapper برای برنامه شما به جای جایگزینی برنامه ساخته شده از قبل. برای راه حل کم کد - می توانید آن را تغییر دهید spring.jackson.default-property-inclusion اموال در فایل های خواص شما

در نهایت - می توانید از @JsonInclude حاشیه نویسی در سطح کلاس یا سطح روش.

تمبر زمان:

بیشتر از Stackabuse