Jackson使用总结

来源:互联网 发布:绕过公司屏蔽上淘宝网 编辑:程序博客网 时间:2024/06/03 19:29
  1. 将java对象obj转为json字符串

    ObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(obj);
  2. 将json字符串转为java对象

    ObjectMapper mapper = new ObjectMapper();Object obj = mapper.readValue(json, Object.class);
  3. 在一对多和多对一的关系中,两个类互相引用的情况下,如果将其中一个对象转为json字符串,则会出现两个对象循环调用,出现死循环,有两种解决方案,

    1. 一种是在多方对一方引用的属性上加上@JsonIgnore,直接忽略对一方的引用,这个情况下会导致将json字符串转为对象时,无法自动为多方初始化一方的引用。
    2. 第二种是在一方对多方的引用上添加@JsonManagedReference,在多方对一方的引用上添加@JsonBackReference。如果只是这样确实能实现简单的转换,但当一个对象(保存对象的对象)中有多个这样的互相引用,在将json字符串转为java对象时会报错Jackson: Multiple back-reference properties with name 'defaultReference',意思是多个引用使用了同一个默认的名称,这种情况就需要写成@JsonManagedReference(“name1”)和@JsonBackReference(“name1”)了,同一个对应关系引用同一个名称,多个对应关系要引用不同的名称,详细见官网的说明json
  4. 有时需要同一个类的对象引用同一类的对象,这时有可能报错,说对象引用了自身,这个时候需要在类的定义上加上@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")