初级用法
属性重命名
作用: 改变某个成员属性使用的JSON名称
public class Name{
@JsonProperty("firstName")
public String _first_name;
}
将会生成如下所示的JSON数据结果:
{"firstName":"Bob"}
忽略属性使用的注解
- POJO中包含不想输出的属性时使用
public class Value{
public int value;
@JsonIgnore public int internalValue;
}
此时得到的JSON数据结果如下
{"value":42}
- 忽略JSON数据中得到的属性
@JsonIgnoreProperties("extra","uselessValue")
public class Value{
public int value;
}
忽略掉没有完全匹配的JSON属性
@JsonIgnoreProperties(ignoreUnknow=true)
public class PojoWithAny{
public int value;
}
序列化输出指定类型
- 读取时(反序列化),声明的类型可能是一个基本类型,但是你确切的知道应该使用的实现类型(生成实现类的对象);
public class ValueContainer{
@JsonDeserialize(as=ValueImpl.class)
public Value value;
}
- 输出时,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<String,Object> delegate){
_x = (Integer)delegate.get("x");
_y = (Integer)delegate.get("y");
}
}
设置属性的自动发现
@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)
网友评论