Jackson 反序列化问题

来源:互联网 发布:ssm框架项目源码下载 编辑:程序博客网 时间:2024/05/29 19:10
今天遇到一个这样的问题:需要把json串返序列化成对象,但是有些json串的某些值是不对了,类型为List的值为空时,json串里的内容是 “” 而不是 [],最终想到用注解
@JsonDeserialize 来解决,下面是一个代码例子。
我们的对象:
public class Student implements Serializable{    private String name;    private String country;    private List<String> courseList;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getCountry() {        return country;    }    public void setCountry(String country) {        this.country = country;    }    public List<String> getCourseList() {        return courseList;    }    @JsonDeserialize(using = StudentCourseDeserializer.class,as = List.class,contentAs = String.class)    public void setCourseList(List<String> courseList) {        this.courseList = courseList;    }}

自己的反序列化注解:
import com.fasterxml.jackson.core.JsonParser;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.DeserializationContext;import com.fasterxml.jackson.databind.JsonDeserializer;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class StudentCourseDeserializer extends JsonDeserializer<List>{    @Override    public List deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {        Object value = jsonParser.readValueAs(Object.class);        if(value instanceof List){            return (List)value;        }else return null;    }}

应用实例:
public class JacksonTest {    public static void main(String[] args) throws Exception{        ObjectMapper objectMapper = new ObjectMapper();        String studentJson = "{\"name\":\"小王\",\"country\":\"中国\",\"courseList\":\"\"}";//此处courseList节点值是 "",但是对应的对象中的courseList 却是一个List        Student student1 = objectMapper.readValue(studentJson,Student.class);        if(null != student1){        }    }}


0 0
原创粉丝点击