• Java Jackson


    from://http://www.studytrails.com/java/json/java-jackson-Serialization-polymorphism.jsp

    Jackson provides a way to maintain sub type information while serializing java objects. It is possible to recreate the exact sub type. The type information can be embedded into the json as a property. In the example below we create a zoo, that has a list of animals. The animal may be an elephant or a lion, and they both extend the Animal abstract class. While deserializing we want to create the exact animal type. We also demonstrate the use of @JsonTypeInfo and @JsonSubTypes annotations.

    Data Serialization and Polymorphism Example

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    package com.studytrails.json.jackson;
     
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
     
    import com.fasterxml.jackson.core.JsonGenerationException;
    import com.fasterxml.jackson.databind.JsonMappingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
     
    public class SerializeExample1 {
        private static String outputFile = "zoo.json";
     
        public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
            // let start creating the zoo
            Zoo zoo = new Zoo("Samba Wild Park""Paz");
            Lion lion = new Lion("Simba");
            Elephant elephant = new Elephant("Manny");
            List<Animal> animals = new ArrayList<>();
            animals.add(lion);
            animals.add(elephant);
            zoo.setAnimals(animals);
     
            ObjectMapper mapper = new ObjectMapper();
            mapper.writerWithDefaultPrettyPrinter().writeValue(new FileWriter(new File(outputFile)), zoo);
        }
    }

    Before we look at the various classes, lets also see how to deserialize this

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package com.studytrails.json.jackson;
     
    import java.io.File;
    import java.io.IOException;
     
    import org.apache.commons.io.FileUtils;
     
    import com.fasterxml.jackson.core.JsonParseException;
    import com.fasterxml.jackson.databind.JsonMappingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
     
    public class DeSerializeExample1 {
     
        public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
            ObjectMapper mapper = new ObjectMapper();
            Zoo zoo = mapper.readValue(FileUtils.readFileToByteArray(new File("zoo.json")), Zoo.class);
            System.out.println(zoo);
        }
    }

    Zoo class

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    package com.studytrails.json.jackson;
     
    import java.util.List;
     
    import com.fasterxml.jackson.annotation.JsonCreator;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonTypeInfo;
    import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
     
    @JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS, include = As.PROPERTY, property = "@class")
    public class Zoo {
     
        public String name;
        public String city;
        public List<Animal> animals;
     
        @JsonCreator
        public Zoo(@JsonProperty("name") String name, @JsonProperty("city") String city) {
            this.name = name;
            this.city = city;
        }
     
        public void setAnimals(List<animal> animals) {
            this.animals = animals;
        }
     
        @Override
        public String toString() {
            return "Zoo [name=" + name + ", city=" + city + ", animals=" + animals + "]";
        }
     
    }
     
     
    </animal>

    Animal Abstract class

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    package com.studytrails.json.jackson;
     
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonSubTypes;
    import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
    import com.fasterxml.jackson.annotation.JsonTypeInfo;
    import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
     
    @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = As.PROPERTY, property = "@class")
    @JsonSubTypes({ @Type(value = Lion.class, name = "lion"), @Type(value = Elephant.class, name = "elephant") })
    public abstract class Animal {
        @JsonProperty("name")
        String name;
        @JsonProperty("sound")
        String sound;
        @JsonProperty("type")
        String type;
        @JsonProperty("endangered")
        boolean endangered;
     
    }

    Lion class

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    package com.studytrails.json.jackson;
     
    import com.fasterxml.jackson.annotation.JsonCreator;
    import com.fasterxml.jackson.annotation.JsonProperty;
     
    public class Lion extends Animal {
     
        private String name;
     
        @JsonCreator
        public Lion(@JsonProperty("name") String name) {
            this.name = name;
        }
     
        public String getName() {
            return name;
        }
     
        public String getSound() {
            return "Roar";
        }
     
        public String getType() {
            return "carnivorous";
        }
     
        public boolean isEndangered() {
            return true;
        }
     
        @Override
        public String toString() {
            return "Lion [name=" + name + ", getName()=" + getName() + ", getSound()=" + getSound() + ", getType()=" + getType() + ", isEndangered()="
                    + isEndangered() + "]";
        }
     
    }

    Elephant class

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    package com.studytrails.json.jackson;
     
    import com.fasterxml.jackson.annotation.JsonCreator;
    import com.fasterxml.jackson.annotation.JsonProperty;
     
    public class Elephant extends Animal {
     
        @JsonProperty
        private String name;
     
        @JsonCreator
        public Elephant(@JsonProperty("name") String name) {
            this.name = name;
        }
     
        public String getName() {
            return name;
        }
     
        public String getSound() {
            return "trumpet";
        }
     
        public String getType() {
            return "herbivorous";
        }
     
        public boolean isEndangered() {
            return false;
        }
     
        @Override
        public String toString() {
            return "Elephant [name=" + name + ", getName()=" + getName() + ", getSound()=" + getSound() + ", getType()=" + getType()
                    ", isEndangered()=" + isEndangered() + "]";
        }
     
    }
  • 相关阅读:
    [转载]Matlab实用小技巧
    Matlab rand randn randint
    Matlab取整
    Mathtype报错:MathType has detected an error in....
    [转载]十大编程算法助程序员走上高手之路
    (转)Free函数的参数一定要是malloc返回的那个指针
    sizeof,一个其貌不扬的家伙(转)
    ISO C Random Number Functions
    srand() rand() time(0)
    IOS之文件夹创建、删除,图片在本地的保存和加载
  • 原文地址:https://www.cnblogs.com/wanqieddy/p/4013205.html
Copyright © 2020-2023  润新知