مقادیر تهی در توسعه نرم افزار و مدیریت صحیح آن بسیار به وجود می آیند 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
حاشیه نویسی در سطح کلاس یا سطح روش.