جاوا اور اسپرنگ بوٹ میں جیکسن کے ساتھ نل فیلڈز کو نظر انداز کریں۔

سافٹ ویئر ڈویلپمنٹ، اور مناسب طریقے سے ہینڈلنگ میں کالعدم اقدار بہت زیادہ پیدا ہوتی ہیں۔ null اقدار کو اپنے آپ میں ایک سائنس میں تبدیل کیا جاسکتا ہے۔ جیکسن جاوا آبجیکٹ کی سیریلائزیشن اور ڈی سیریلائزیشن کے لیے ڈی فیکٹو لائبریری ہے - اور ایک عام منظر نامہ ان اشیاء کو سیریلائز کرنے سے متعلق ہے جس میں null کھیتوں میں.

اس مختصر ٹیوٹوریل میں، ہم اس پر ایک نظر ڈالیں گے کہ جیکسن کے ساتھ POJO کو سیریلائز کرتے وقت آپ null فیلڈز کو کیسے نظر انداز کر سکتے ہیں۔

آبجیکٹ میپر کی ترتیبات کو تبدیل کرنا

جیکسن کا آبجیکٹ میپر مرکزی API ہے جو آبجیکٹ کو سیریلائزڈ ویلیوز پر نقشہ بناتا ہے۔ قدرتی طور پر، آپ مختلف جھنڈوں کے ذریعے کام کرنے کے طریقے کو ایڈجسٹ اور اپنی مرضی کے مطابق بنا سکتے ہیں، جن میں سے ایک یہ ہے:

objectMapper.setSerializationInclusion(Include.NON_NULL);

اس میپر کے ساتھ سیریلائز کرتے وقت، پراپرٹیز کو صرف اس صورت میں شامل کیا جائے گا جب وہ غیر صفر ہوں۔

یہ جھنڈا سیٹ کرتا ہے۔ عالمی سطح پر کے ساتھ سیریلائز ہونے والی کسی بھی چیز کے لیے objectMapper مثال. اگر آپ اسپرنگ بوٹ کے ساتھ کام کر رہے ہیں، اور جس آبجیکٹ میپر پر یہ انحصار کر رہا ہے وہ بے نقاب نہیں ہے، تو آپ جھنڈے کو تبدیل کر سکتے ہیں۔ application.properties فائل:

spring.jackson.default-property-inclusion = non_null

یا، اگر آپ استعمال کر رہے ہیں۔ application.yml:

spring:
  jackson:
    default-property-inclusion: non_null

نوٹ: بہار کے پرانے ورژن استعمال کیے گئے۔ 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 تشریح، اور اکثر اوقات مخصوص کنفیگریشن کلاس یا اسپرنگ بوٹ ایپلیکیشن کی مین کلاس میں واقع ہوتی ہے۔

Jackson2ObjectMapperBuilder مثال کو تبدیل کرنا

موسم بہار کا استعمال کرتا ہے HttpMessageConverters HTTP پیغامات اور اشیاء کے درمیان تبدیل کرنے کے لیے۔ پہلے سے طے شدہ کنورٹرز ہیں۔ ObjectMapper اور XmlMapper کے ذریعے فوری طور پر مثالیں Jackson2ObjectMapperBuilder.

دستی طور پر پرائمری فراہم کرنے کے بجائے ObjectMapper (بلڈر کے ذریعہ فراہم کردہ کی جگہ لے کر)، آپ اسپرنگ آن کی ہدایت دے سکتے ہیں۔ تعمیر کرنے کا طریقہ اس کے بجائے آبجیکٹ میپر۔ یہ اسپرنگ کو نچلے درجے کی اشیاء کے ساتھ چھیڑ چھاڑ کیے بغیر اپنی اعلیٰ سطحی کنفیگریشنز کرنے کی اجازت دیتا ہے، جبکہ اب بھی اس کے کام کرنے کے طریقے کو اپنی مرضی کے مطابق بناتا ہے۔ اس کے علاوہ، آپ کو بھی اپنی مرضی کے مطابق کر سکتے ہیں XmlMapper ایک بار میں اس طرح.

بلڈر کو اپنی مرضی کے مطابق بنانے کے لیے، آپ ایک نیا رجسٹر کرتے ہیں۔ @Bean of Jackson2ObjectMapperBuilderCustomizer قسم، جو بلڈر کو اپنی مرضی کے مطابق بناتا ہے اور واپس کرتا ہے:

@Bean
public Jackson2ObjectMapperBuilderCustomizer customBuilder() {
    return builder -> {
      builder.serializationInclusion(JsonInclude.Include.NON_NULL);
    }
}

@JsonInclude تشریح

سپیکٹرم کے دوسرے سرے پر، ہم تشریحات کو کم کوڈ کے متبادل کے طور پر استعمال کر سکتے ہیں! تشریحات کو کلاس کی سطح یا طریقہ کی سطح پر لاگو کیا جا سکتا ہے:

@JsonInclude(JsonInclude.Include.NON_NULL)

یہ آپ کو آبجیکٹ میپر کے عالمی رویے کے بجائے صرف مخصوص کلاسوں کو اپنی مرضی کے مطابق کرنے کی اجازت دیتا ہے۔

بہترین طرز عمل، صنعت کے لیے منظور شدہ معیارات، اور چیٹ شیٹ کے ساتھ 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;
    
    
}

کوئی بھی فیلڈ جس میں a 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 میدان.

نتیجہ

اس گائیڈ میں، آپ نے سیکھا ہے کہ جاوا اور اسپرنگ بوٹ کے ساتھ جیکسن میں خالی فیلڈز کو کیسے نظر انداز کیا جائے۔ یہ بنیادی مضمرات کی جگہ لے کر عالمی سطح پر حاصل کیا جا سکتا ہے۔ ObjectMapper مثال کے طور پر اور نئے پرائمری بین کے رویے کو حسب ضرورت بنانا جو آپ رجسٹر کرتے ہیں۔

متبادل طور پر، آپ اپنی مرضی کے مطابق کر سکتے ہیں Jackson2ObjectMapperBuilder جو بناتا ہے ObjectMapper پہلے سے تعمیر شدہ کو تبدیل کرنے کے بجائے آپ کی درخواست کے لیے۔ کم کوڈ کے حل کے لیے - آپ اسے تبدیل کر سکتے ہیں۔ spring.jackson.default-property-inclusion آپ کی پراپرٹی فائلوں میں پراپرٹی۔

آخر میں - آپ استعمال کر سکتے ہیں @JsonInclude کلاس کی سطح یا طریقہ کی سطح پر تشریح۔

ٹائم اسٹیمپ:

سے زیادہ Stackabuse