接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给我们提供了一系列注解,提高了开发的灵活性,下面介绍一下最常用的一些注解
此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。
此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")
此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。
public class CustomDoubleSerialize extends JsonSerializer<Double> { private DecimalFormat df = new DecimalFormat("##.00"); @Override public void serialize(Double value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeString(df.format(value)); } }
此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize
public class CustomDateDeserialize extends JsonDeserializer<Date> { private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); @Override public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { Date date = null; try { date = sdf.parse(jp.getText()); } catch (ParseException e) { e.printStackTrace(); } return date; } }
//表示序列化时忽略的属性 @JsonIgnoreProperties(value = { "word" }) public class Person { private String name; private int age; private boolean sex; private Date birthday; private String word; private double salary; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isSex() { return sex; } public void setSex(boolean sex) { this.sex = sex; } public Date getBirthday() { return birthday; } // 反序列化一个固定格式的Date @JsonDeserialize(using = CustomDateDeserialize.class) public void setBirthday(Date birthday) { this.birthday = birthday; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } // 序列化指定格式的double格式 @JsonSerialize(using = CustomDoubleSerialize.class) public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public Person(String name, int age) { this.name = name; this.age = age; } public Person(String name, int age, boolean sex, Date birthday, String word, double salary) { super(); this.name = name; this.age = age; this.sex = sex; this.birthday = birthday; this.word = word; this.salary = salary; } public Person() { } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", sex=" + sex + ", birthday=" + birthday + ", word=" + word + ", salary=" + salary + "]"; } }
public class Demo { public static void main(String[] args) { writeJsonObject(); // readJsonObject(); } // 直接写入一个对象(所谓序列化) public static void writeJsonObject() { ObjectMapper mapper = new ObjectMapper(); Person person = new Person("nomouse", 25, true, new Date(), "程序员", 2500.0); try { mapper.writeValue(new File("c:/person.json"), person); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // 直接将一个json转化为对象(所谓反序列化) public static void readJsonObject() { ObjectMapper mapper = new ObjectMapper(); try { Person person = mapper.readValue(new File("c:/person.json"), Person.class); System.out.println(person.toString()); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }