JSON 常用注解

摘自:Jackson注解学习参考

初级用法

属性重命名

作用: 改变某个成员属性使用的JSON名称

public class Name{
    @JsonProperty("firstName")
    public String _first_name;
}

将会生成如下所示的JSON数据结果:

{"firstName":"Bob"}

忽略属性使用的注解

  1. POJO中包含不想输出的属性时使用
public class Value{
  public int value;
  @JsonIgnore public int internalValue;
}

此时得到的JSON数据结果如下

{"value":42}
  1. 忽略JSON数据中得到的属性
@JsonIgnoreProperties("extra","uselessValue")
public class Value{
  public int value;
}

忽略掉没有完全匹配的JSON属性

@JsonIgnoreProperties(ignoreUnknow=true)
public class PojoWithAny{
  public int value;
}

序列化输出指定类型

  1. 读取时(反序列化),声明的类型可能是一个基本类型,但是你确切的知道应该使用的实现类型(生成实现类的对象);
public class ValueContainer{
  @JsonDeserialize(as=ValueImpl.class)
  public Value value;
}
  1. 输出时,Json默认使用给定的运行时类型(),但是可以不输出该类的所有信息,只输出该类型父类囊括的信息
public class ValueTest{
  @JsonSerialize(as=BasicType.class)
  //或者输出@JsonSerialize(typing=Typing.STATIC)
  public BasicType another;
}

中级用法

使用构造器或工厂方法

默认情况下,由JSON数据创建对应的实例时,Jackson默认使用该类的默认构造器创建实例.通过@JsonCreator注解可以指定其他实例化方法,还可以使用@JsonProperty绑定名称

public class CrtPOJO{
  private int _x,_y;
  @JsonCreator
  public CrtPOJO(@JsonProperty("x") int x,@JsonProperty("y") int y){
    _x = x;
    _y = y;
  }
}

相同的方法还可以使用在静态工厂方法上,不过还有一个可选的方案,称为授权式构建器(dalegating creator):

public class DelegetingPOJO{
  private int _x,_y;
  @JsonCreator
  public DelegetingPOJO(Map delegate){
    _x = (Integer)delegate.get("x");
    _y = (Integer)delegate.get("y");
  }
}

设置属性的自动发现

@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)


FINISH

你可能感兴趣的:(JSON 常用注解)