تظهر القيم الفارغة كثيرًا في تطوير البرامج والتعامل الصحيح معها null
يمكن تحويل القيم إلى علم في حد ذاته. جاكسون هي المكتبة الواقعية للتسلسل وإلغاء تسلسل كائنات Java - والسيناريو الشائع يتعلق بتسلسل الكائنات التي تحتوي على null
الحقول.
في هذا البرنامج التعليمي القصير ، سنلقي نظرة على كيفية تجاهل الحقول الفارغة عند إجراء تسلسل لـ POJO مع Jackson.
تغيير إعدادات ObjectMapper
يعد ObjectMapper الخاص بـ Jackson واجهة برمجة التطبيقات المركزية التي تعين الكائنات على القيم المتسلسلة. وبطبيعة الحال ، يمكنك ضبط وتخصيص الطريقة التي يعمل بها من خلال العديد من العلامات ، أحدها:
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(JsonInclude.Include.NON_NULL)
يسمح لك هذا بتخصيص فئات معينة فقط ، بدلاً من السلوك العام لمخطط الكائن.
تحقق من دليلنا العملي العملي لتعلم Git ، مع أفضل الممارسات ، والمعايير المقبولة في الصناعة ، وورقة الغش المضمنة. توقف عن أوامر Googling Git وفي الواقع تعلم ذلك!
ملحوظة: اعتبارًا من Jackson 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 على مستوى الأسلوب
بدلاً من ذلك ، يمكنك تطبيق التعليق التوضيحي على مستوى الطريقة كخيار أكثر دقة:
@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
الميدان.
وفي الختام
في هذا الدليل ، تعلمت كيفية تجاهل الحقول الفارغة في Jackson ، باستخدام Java و Spring Boot. يمكن تحقيق هذا على الصعيد العالمي عن طريق استبدال الضمني الأساسي ObjectMapper
المثيل وتخصيص سلوك الفول الأساسي الجديد الذي تسجله.
بدلاً من ذلك ، يمكنك تخصيص ملف Jackson2ObjectMapperBuilder
الذي يبني ObjectMapper
لتطبيقك بدلاً من استبدال التطبيق الذي تم إنشاؤه بالفعل. للحصول على حل منخفض التعليمات البرمجية - يمكنك تغيير spring.jackson.default-property-inclusion
الممتلكات في ملفات الممتلكات الخاصة بك.
أخيرًا - يمكنك استخدام ملف @JsonInclude
التعليق التوضيحي على مستوى الفصل الدراسي أو مستوى الطريقة.