JavaRush /Blog Jawa /Random-JV /Pambuka kanggo Framework Jackson
Mikhail Fufaev
tingkat
Москва

Pambuka kanggo Framework Jackson

Diterbitake ing grup
Ing wengi musim semi sing adhem, akhire aku tekan level 33. Ngusap tangan programmer, aku wis siyap kanggo ngrampungake kabeh bidang serialisasi lan deseralisasi JSON, nanging sayangé, aku ora ngerti apa-apa. Aku ora ngelingi teks kuliah, nanging masalah ditanggulangi kanthi cara intuisi. Ing bab iki, aku mutusaké kanggo delve menyang wilds saka Jackson Framework lan ngerti apa JSON iki.
Jackson Framework
Aku bakal nyoba nyedhiyakake kabeh kawruh kanthi praktis lan ringkes ing format lembar cheat (kanggo aku lan kanggo sing maca). Journey to Jackson Anotasi. Babagan pisanan sing kita temoni ing dalan menyang JSON yaiku anotasi @JsonAutoDetect. Sepisanan, ringkesan sing gampang, nanging butuh wektu sing paling dawa kanggo penulis. Abstrak duwe 5 cara sing dibutuhake:
  • fieldVisibility () - Serializes mung kolom karo akses modifier tartamtu
  • getterVisibility()/setterVisibility() - serializes kolom sing getter/setter nduweni akses modifier tartamtu
  • isGetterVisibility () - implementasine kapisah kanggo getter boolean
Iku penting kanggo ngerti sing cara bisa disjunctively. Sing. yen lapangan cocog paling ora siji paramèter sing ditemtokake ing anotasi, banjur bakal kalebu ing JSON. Coba mangsuli apa kode iki bakal metu yen kita nggawe conto nggunakake konstruktor tanpa parameter:
@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;
    }
}
Apa yen kita mbusak isGetterVisibility? Papat cara sing kadhaptar ngatur proses serialisasi. Kalima, ing siji, ngatur proses deserialization:
  • creatorVisibility () iku cara sing paling angel mangertos. Kerjane karo konstruktor lan karo cara pabrik (metode sing nggawe obyek nalika disebut). Ayo ndeleng conto:
@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);
}
Cathetan penting babagan mekanisme deseralisasi! Nalika kita nyoba nggawe obyek saka JSON, konstruktor kelas sing dibutuhake bakal digoleki kanthi paramèter sing padha karo obyek JSON. Ing conto ing ndhuwur, obyek JSON kita kasusun saka rong paramèter: jeneng, id. Tebak konstruktor sing bakal diarani. Lan ya, yen kita ngumpulake kode iki, bakal mbuwang kesalahan, kenapa? Amarga kita wis diwatesi visibilitas konstruktor (mung konstruktor karo dilindhungi, modifier umum katon). Yen sampeyan mbusak creatorVisibility bakal bisa digunakake. Pitakonan muncul. Apa @JsonProperty ing konstruktor? Aku bakal ngomong babagan iki ing bagean sabanjure artikel. PS Bapak-bapak, kula badhe nyuwun wangsulan babagan artikel punika. Aku wonder yen topik iki dikarepake lan apa iku worth terus, amarga ana akeh topik lan kabeh menarik banget. Aku uga pengin nimbang anotasi kayata @JsonView, @JsonManagedReference, @JsonBackReference, @JsonUnwrapped, etc. matur nuwun :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION