jackson注解

http://blog.csdn.net/nomousewch/article/details/8949899

http://wong-john.iteye.com/blog/1753402

http://bbs.jee-soft.cn:8086/showtopic-156.aspx

jackson注解

Jackson(http://jackson.codehaus.org)库是基于java语言的开源json格式解析工具,相对于javajson解析的其他库,诸如json-lib、gson包,Jackson具有以下优点:

功能全面,提供多种模式的json解析方式,“对象绑定”使用方便,利用注解包能为我们开发提供很多便利。

性能较高,“流模式”的解析效率超过绝大多数类似的json包。

 

jackson-core.jar——核心包(必须),提供基于“流模式”解析的API。

核心包:JsonPaser(json流读取),JsonGenerator(json流输出)。

jackson-databind——数据绑定包(可选),提供基于“对象绑定”和“树模型”相关API。

数据绑定包:ObjectMapper(构建树模式和对象绑定模式),JsonNode(树节点)。

jackson-annotations——注解包(可选),提供注解功能。

jackson-datatype-joda-2.1.5.jar——日期转换

 

Jackson注解

@JsonIgnoreProperties

类注解, 作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。用法很简单@JsonIgnoreProperties({"property1","property2"}),Hibernate延时加载

因为jsonplugin用的是java的内审机制.hibernate会给被管理的pojo加入一个 hibernateLazyInitializer属性,jsonplugin会把hibernateLazyInitializer也拿出来操作,并读取里面一个不能被反射操作的属性就产生了这个异常,可以用annotation来排除hibernateLazyInitializer这个属性。

 

@JsonIgnore

作用于属性或字段上,用来表明,当生成json的时候忽略有该annotation的方法或字段

 

@JsonProperty("firstName")

作用于属性或字段上,重命名

 

@JsonFormat

作用于属性或者字段上,方便的把Date类型直接转化为我们想要的模式,如@JsonFormat(pattern ="yyyy-MM-dd HH-mm-ss")

 

@JsonSerialize

作用于属性或者字段上,指定序列化方式

@JsonSerialize(as=BasicType.class)

将类型序列化成指定类型

@JsonSerialize(using=CustomDoubleSerialize.class)

作用于属性或者字段上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。

@JsonSerialize(using= CustomDoubleSerialize.class) 

publicclass CustomDateDeserialize extends JsonDeserializer<Date> {

         private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

         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;

         }

}

 

@JsonDeserialize

作用于属性或者字段上,指定反序列化方式

@JsonDeserialize(as=ValueImpl.class)

将类型反序列化成指定类型

@JsonDeserialize(using= CustomDateDeserialize.class)

用于在反序列化时嵌入我们自定义的代码

publicclass CustomDateDeserialize extends JsonDeserializer<Date> {

         private SimpleDateFormat sdf = newSimpleDateFormat("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;

         }

}

 

@JsonCreator

作用于使用构造器方法或工厂方法 ,指定反序列化时创建实例方式(默认使用无参数构造器)

采用构造器方式

publicclass MyBean {

  private int value;

  @JsonCreator

  publicMyBean(@JsonProperty("value") int v) {

    this.value = v;

  }

  public int getValue() { return value; }

}

使用相同的方式,可以将@JsonCreator用在静态工厂方法上

不过,还有一个可选的替代方案,被称作“授权式”构建器(“delegating” creator):

publicclass DelegatingPOJO {

   private final int _x, _y;

   @JsonCreator

   publicDelegatingPOJO(Map<String,Object> delegate) {

      _x = (Integer)delegate.get("x");

      _y = (Integer)delegate.get("y");

   }

}

 

@JsonTypeInfo

类注解,当输出操作的对象拥有多个子类型且在反序列化时需要添加子类对象的类型信息,使用此注解可以正确地设置子类对象的类型

@JsonTypeInfo(use=Id.CLASS,include=As.PROPERTY,property=”class”)

子类类型作为属性,属性名为class

"animals": [ {

    "class" :"jackson.Lion",

    "name" : "Simba",

    "sound" : "Roar",

    "type" : "carnivorous",

    "endangered" : true

}]

@JsonTypeInfo(use=Id.CLASS,include= As.WRAPPER_OBJECT)

"animals": [ {

    "jackson.Lion" : {

      "name" : "Simba",

      "sound" : "Roar",

      "type" :"carnivorous",

      "endangered" : true

    }

 }]

这个注解还有很多配置可以进行设置

 

@JsonAutoDetect

类注解,指定属性发现规则

Jackson默认的属性发现规则将会查找到如下所述的属性:

•所有被public修饰的字段(成员变量);

•所有被public修饰的getter(即形如“getXxx()”的方法);

•所有被public修饰的setter(即形如“setXxx(value)”的方法)

@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)

@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)

 

更多注解查看http://wiki.fasterxml.com/JacksonAnnotations

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值