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

جڪسن فريم ورڪ جو تعارف

گروپ ۾ شايع ٿيل
ٿڌي بهار جي رات تي، مان آخرڪار 33 جي سطح تي پهچي ويو. منهنجي پروگرامر جي هٿن کي ڇڪيندي، مان اڳ ۾ ئي تيار ڪري رهيو هوس ته JSON سيريلائيزيشن ۽ ڊيسيريلائيزيشن جي پوري فيلڊ کي گڏي، پر، بدقسمتي سان، مون کي ڪجهه به سمجهه ۾ نه آيو. مون کي ليڪچر جو متن ياد نه هو، پر مسئلا ڪنهن نه ڪنهن طريقي سان حل ڪيا ويا. انهي سلسلي ۾، مون فيصلو ڪيو ته جيڪسن فريم ورڪ جي جهنگلي ۾ ۽ اهو معلوم ڪيو ته هي JSON ڇا آهي.
جڪسن فريم ورڪ
مان ڪوشش ڪندس ته پنهنجي سموري ڄاڻ کي عملي ۽ جامع انداز ۾ چيٽ شيٽ جي شڪل ۾ پيش ڪريان (پنهنجي لاءِ ۽ پڙهندڙن لاءِ). جڪسن جي تشريح ڏانهن سفر. پهرين شيء جيڪا اسان کي JSON جي رستي تي ملي ٿي اها آهي @JsonAutoDetect تشريح. پهرين نظر ۾، اهو هڪ آسان خلاصو آهي، پر اهو ليکڪ کي اهو معلوم ڪرڻ لاء تمام ڊگهو وقت ورتو. خلاصو 5 طريقن سان اسان کي ضرورت آهي:
  • fieldVisibility () - سيريلائيز صرف فيلڊز کي مخصوص رسائي موڊيفائر سان
  • 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);
}
Deserialization ميڪانيزم تي اهم نوٽ! جڏهن اسان JSON مان هڪ اعتراض ٺاهڻ جي ڪوشش ڪندا آهيون، گهربل ڪلاس جي تعمير ڪندڙ کي ساڳئي سيٽ جي پيرا ميٽرز سان ڳوليو ويندو جيئن JSON اعتراض ۾. مٿين مثال ۾، اسان جو JSON اعتراض ٻن پيٽرولر تي مشتمل آهي: نالو، id. اندازو لڳايو ته ڪھڙي ٺاھيندڙ کي سڏيندو. ۽ ها، جيڪڏهن اسان هن ڪوڊ کي گڏ ڪريون ٿا، اهو هڪ غلطي اڇلائي ڇڏيندو، ڇو؟ ڇاڪاڻ ته اسان تعمير ڪندڙ جي نمائش کي محدود ڪيو (صرف تعمير ڪندڙ محفوظ، عوامي ترميم ڪندڙ نظر اچن ٿا). جيڪڏهن توهان creatorVisibility کي هٽايو ته اهو ڪم ڪندو. سوال ٿو پيدا ٿئي. تعمير ڪندڙ ۾ @JsonProperty ڇا آهي؟ مان سمجهان ٿو ته آئون مضمون جي ايندڙ حصي ۾ ان بابت ڳالهائيندس. پي ايس حضرات، مان واقعي چاهيان ٿو گهٽ ۾ گهٽ مضمون بابت ڪجهه جواب. مون کي تعجب آهي ته هي موضوع گهربل آهي ۽ ڇا اهو جاري رکڻ جي لائق آهي، ڇاڪاڻ ته اتي تمام گهڻا موضوع آهن ۽ اهي تمام دلچسپ آهن. مان به تشريح تي غور ڪرڻ چاهيندس جيئن @JsonView، @JsonManagedReference، @JsonBackReference، @JsonUnwrapped، وغيره. تنهنجي مهرباني :)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION