JavaRush /جاوا بلاگ /Random-UR /جیکسن فریم ورک کا تعارف
Mikhail Fufaev
سطح
Москва

جیکسن فریم ورک کا تعارف

گروپ میں شائع ہوا۔
موسم بہار کی ایک سرد رات میں، میں آخر کار 33 کی سطح پر پہنچ گیا۔ اپنے پروگرامر کے ہاتھوں کو رگڑتے ہوئے، میں پہلے ہی JSON سیریلائزیشن اور ڈی سیریلائزیشن کے پورے فیلڈ کو اپنانے کی تیاری کر رہا تھا، لیکن بدقسمتی سے، مجھے کچھ سمجھ نہیں آیا۔ مجھے لیکچر کا متن یاد نہیں تھا، لیکن مسائل کسی نہ کسی طرح بدیہی طور پر حل ہو گئے تھے۔ اس سلسلے میں، میں نے جیکسن فریم ورک کے جنگلوں کو تلاش کرنے اور یہ معلوم کرنے کا فیصلہ کیا کہ یہ JSON کیا ہے۔
جیکسن فریم ورک
میں کوشش کروں گا کہ اپنے تمام علم کو عملی اور جامع انداز میں چیٹ شیٹ کی شکل میں پیش کروں (میرے لیے بھی اور قارئین کے لیے بھی)۔ جیکسن تشریحات کا سفر۔ JSON کے راستے میں ہمیں پہلی چیز جس کا سامنا کرنا پڑتا ہے وہ ہے @JsonAutoDetect تشریح۔ پہلی نظر میں، یہ ایک آسان خلاصہ ہے، لیکن مصنف کو اس کا پتہ لگانے میں سب سے زیادہ وقت لگا۔ خلاصہ میں 5 طریقے ہیں جن کی ہمیں ضرورت ہے:
  • فیلڈ ویزیبلٹی () - مخصوص رسائی موڈیفائر کے ساتھ صرف فیلڈز کو سیریلائز کرتا ہے۔
  • getterVisibility()/setterVisibility() - ان فیلڈز کو سیریلائز کرتا ہے جن کے حاصل کرنے والے/setter کے پاس مخصوص رسائی موڈیفائر ہے
  • isGetterVisibility() - بولین حاصل کرنے والوں کے لیے علیحدہ نفاذ
یہ سمجھنا ضروری ہے کہ طریقے غیر منقولہ طور پر کام کرتے ہیں۔ وہ. اگر فیلڈ تشریح میں بیان کردہ کم از کم ایک پیرامیٹرز سے میل کھاتا ہے، تو اسے JSON میں شامل کیا جائے گا۔ جواب دینے کی کوشش کریں کہ اگر ہم پیرامیٹر لیس کنسٹرکٹر کا استعمال کرتے ہوئے ایک مثال بناتے ہیں تو یہ کوڈ کیا نکلے گا۔
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY,
        getterVisibility        = JsonAutoDetect.Visibility.PUBLIC_ONLY,
        setterVisibility        = JsonAutoDetect.Visibility.PUBLIC_ONLY,
        isGetterVisibility      = JsonAutoDetect.Visibility.PROTECTED_AND_PUBLIC)
public class HeadClass {
    public String name;
    private Map<String, String> properties;
    public Queue<String> queue;
    protected List<String> list;
    private int age;
    private int number;
    private boolean isHead;

    protected HeadClass(int age) {
        this.age = age;
    }

    public HeadClass() {}

    Map<String, String> getProperties() {
        return properties;
    }

    protected boolean isHead() {
        return isHead;
    }

    protected void setProperties(Map<String, String> properties) {
        this.properties = properties;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}
اگر ہم isGetterVisibility کو ہٹا دیں تو کیا ہوگا؟ درج کردہ چار طریقوں نے سیریلائزیشن کے عمل کو ترتیب دیا ہے۔ پانچواں، بدلے میں، ڈی سیریلائزیشن کے عمل کو منظم کرتا ہے:
  • creatorVisibility() کو سمجھنے کا سب سے مشکل طریقہ ہے۔ یہ کنسٹرکٹرز کے ساتھ اور فیکٹری کے طریقوں کے ساتھ کام کرتا ہے (وہ طریقے جو کال کرنے پر کسی چیز کو بناتے ہیں)۔ آئیے ایک مثال دیکھتے ہیں:
@JsonAutoDetect(creatorVisibility = JsonAutoDetect.Visibility.PROTECTED_AND_PUBLIC)
public class HeadClass {
    public String name;
    public int id;

    HeadClass(@JsonProperty(value = "name") String name, @JsonProperty(value = "id") int id) {
        this.name = name;
        this.id = id;
    }

    protected HeadClass(String name) {
        this.name = name;
        this.id = 123;
    }

    protected HeadClass(int id) {
        this.id = id;
        this.name = "Yes!";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public static void main(String[] args) throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    String forDeserialize = "{\"name\":\"No!\",\"id\":123}";
    StringReader reader = new StringReader(forDeserialize);

    HeadClass headClass1 = (HeadClass) mapper.readValue(reader, HeadClass.class);
}
ڈی سیریلائزیشن میکانزم پر اہم نوٹ! جب ہم JSON سے کوئی آبجیکٹ بنانے کی کوشش کرتے ہیں، تو مطلوبہ کلاس کے کنسٹرکٹر کو پیرامیٹرز کے اسی سیٹ کے ساتھ تلاش کیا جائے گا جیسا کہ JSON آبجیکٹ میں ہے۔ اوپر کی مثال میں، ہمارا JSON آبجیکٹ دو پیرامیٹرز پر مشتمل ہے: نام، id۔ اندازہ لگائیں کہ یہ کس کنسٹرکٹر کو کال کرے گا۔ اور ہاں، اگر ہم اس کوڈ کو مرتب کریں گے، تو یہ ایک ایرر پھینک دے گا، کیوں؟ کیونکہ ہم نے کنسٹرکٹر کی مرئیت کو محدود کر دیا ہے (صرف کنسٹرکٹر جن میں محفوظ، پبلک موڈیفائر نظر آتے ہیں)۔ اگر آپ creatorVisibility کو ہٹاتے ہیں تو یہ کام کرے گا۔ سوال یہ پیدا ہوتا ہے۔ کنسٹرکٹر میں @JsonProperty کیا ہے؟ میرا خیال ہے کہ میں اس مضمون کے اگلے حصے میں بات کروں گا۔ PS حضرات، میں واقعی مضمون کے بارے میں کم از کم کچھ جواب حاصل کرنا چاہوں گا۔ مجھے حیرت ہے کہ کیا یہ موضوع مانگ میں ہے اور کیا یہ جاری رکھنے کے قابل ہے، کیونکہ بہت سارے عنوانات ہیں اور وہ سب بہت دلچسپ ہیں۔ میں تشریحات پر بھی غور کرنا چاہوں گا جیسے @JsonView، @JsonManagedReference، @JsonBackReference، @JsonUnwrapped، وغیرہ۔ شکریہ :)
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION