জাভা এবং স্প্রিং বুটে জ্যাকসনের সাথে নাল ফিল্ড উপেক্ষা করুন

নাল মান সফ্টওয়্যার উন্নয়ন অনেক উত্থাপিত, এবং সঠিক হ্যান্ডলিং null মূল্যবোধগুলিকে নিজেই বিজ্ঞানে পরিণত করা যেতে পারে। জ্যাকসন হল জাভা অবজেক্টের সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশনের জন্য ডি-ফ্যাক্টো লাইব্রেরি - এবং একটি সাধারণ দৃশ্যকল্প সিরিয়ালাইজ করা বস্তুর সাথে সম্পর্কিত null ক্ষেত্র.

এই সংক্ষিপ্ত টিউটোরিয়ালে, আমরা জ্যাকসনের সাথে একটি POJO সিরিয়াল করার সময় আপনি কীভাবে নাল ক্ষেত্রগুলিকে উপেক্ষা করতে পারেন তা দেখব।

অবজেক্টম্যাপার সেটিংস পরিবর্তন করা হচ্ছে

জ্যাকসনের অবজেক্টম্যাপার হল সেন্ট্রাল এপিআই যা ক্রমিক মানগুলিতে অবজেক্ট ম্যাপ করে। স্বাভাবিকভাবেই, আপনি বিভিন্ন পতাকাগুলির মাধ্যমে এটি যেভাবে কাজ করে তা সামঞ্জস্য এবং কাস্টমাইজ করতে পারেন, যার মধ্যে একটি হল:

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);
    }
}

@Json ইনক্লুড টীকা

বর্ণালীর অন্য প্রান্তে, আমরা টীকা ব্যবহার করতে পারি, একটি কম-কোড বিকল্প হিসাবে! শ্রেণী-স্তরে বা পদ্ধতি-স্তরে টীকা প্রয়োগ করা যেতে পারে:

@JsonInclude(JsonInclude.Include.NON_NULL)

এটি আপনাকে অবজেক্ট ম্যাপারের বৈশ্বিক আচরণের পরিবর্তে শুধুমাত্র নির্দিষ্ট ক্লাস কাস্টমাইজ করতে দেয়।

সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!

বিঃদ্রঃ: জ্যাকসন 2.0 অনুযায়ী, টীকাটির মান JsonInclude.Include.NON_NULL. পূর্ববর্তী সংস্করণগুলির জন্য, ব্যবহার করুন include=JsonSerialize.Inclusion.NON_NULL.

@জেসন ক্লাস-লেভেলে অন্তর্ভুক্ত করুন

যখন আপনি আবেদন করবেন @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 মান ক্রমিক করা হবে না।

@Json ইনক্লুড মেথড-লেভেলে

বিকল্পভাবে, আপনি পদ্ধতি-স্তরে সবচেয়ে দানাদার বিকল্প হিসাবে টীকা প্রয়োগ করতে পারেন:

@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