jackson-annotations 依赖的基本用法

一、重命名属性

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

 结果是:

{ "firstName" : "Bob" }  

 二、忽略属性

public class Value {  
  public int value1;  
  @JsonIgnore   
  public int value2;  
}  

 结果是:

{ "value1" : 42 }  

 ①当由json字符串反序列化成pojo时,如果想忽略json字符串中的某些属性这样处理:

@JsonIgnoreProperties({ "extra", "uselessValue" })
public class Value {
  public int value;
}

 这样就可以把下面的json字符串反序列化成 Value 对象:

{ "value" : 42, "extra" : "fluffy", "uselessValue" : -13 }  

 ②若反序列化时要忽略所有pojo中不存在的属性可以这样:

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

 三、指定属性类型

有时候属性的类型并不是你想要的,比如以下情况:

  • 反序列化的时候,声明的类型是一个通用类型,但是你知道应该对应哪个具体的实现类。
  • 序列化时,你可能不需要一个类的全部属性,只是想要它的父类的属性。

这样处理就可以

public class ValueContainer {  
  // 尽管这个属性是 Value 类型,  
  // 但是你想在反序列化时将json字符串读取成ValueImpl 类型  
  @JsonDeserialize(as=ValueImpl.class)  
  public Value value;  
  
  // 如果你将BasicType的子类AdvancedType的一个对象赋值给这个属性  
  // 但是你又想按照BasicType类型来序列化  
  //(默认是按照属性的运行时类型,即AdvancedType序列化)  
  
  @JsonSerialize(as=BasicType.class)  
  // 或者用 @JsonSerialize(typing=Typing.STATIC)  
  public BasicType another;  
}  

 四、使用构造器或工厂方法

①Jackson默认使用无参的默认构造器来创建实例,但是也可以使用其他构造器或者静态的工厂方法来创建实例。

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

②静态的工厂方法也是同样的用法。但是还有一个被称作“委托”的另类用法:

public class DelegatingPOJO {
   private final int _x, _y;
 
   @JsonCreator
   public DelegatingPOJO(Map<String,Object> delegate) {
      _x = (Integer) delegate.get("x");
      _y = (Integer) delegate.get("y");
   }
}

 这种用法只能有一个参数,而且不能带@JsonProperty注解。

五、修改属性自动检测

Jackson默认的属性检测规则是这样的:

  • 所有的 public 类型的属性
  • 所有的 public 类型的 get 方法
  • 所有的 set 方法(无论方法的可见性)

如果默认规则不能满足需求,可以用@JsonAutoDetect注解来改变。

①比如想要自动检测到所有属性(无论该属性的可见性)

@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)
public class POJOWithFields {
  private int value;
}

 ②想要跳过所有方法

@JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.NONE)
public class POJOWithNoMethod {
 
}

 ③两个加在一起就是只检测属性不检测方法了(鄙人就是为了这个才去读了官方文档的)

@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY, getterVisibility=JsonAutoDetect.Visibility.NONE)  
public class POJOWithOnlyField {  
  
}  

基本使用就这些了。英文原文看这里:原文地址。Jackson全部注解看这里:Jackson注解大全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@解忧杂货铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值