天天看点

Hibernate JPA中注解解释 @Json Jackson常用

一般情况下使用JSON只使用了java对象与字符串的转换,但是,开发APP时候,我们经常使用实体类来做转换;这样,就需要用到注解;

   Jackson默认是针对get方法来生成JSON字符串的,可以使用注解来做一些特殊用途;常见的使用如下:

1、@Transient

@[email protected]映射,ORM框架将忽略该属性;

如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic;

//表示该字段在数据库表中没有

@Transient

public int getAge() {

 return 1+1;

}

2、@JsonIgnoreProperties

此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

3、@JsonIgnore

此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。

4、@JsonFormat

此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")

5、@JsonSerialize

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

6、@JsonDeserialize

此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1 排除属性 @JsonIgnore,一般标记在属性或方法上;作用于序列化与反序列化; @JsonIgnoreProperties,如果是代理类,由于无法标记在属性或方法上,所以,可以标记在类声明上;也作用于反序列化时的字段解析;

2 属性别名 @JsonProperty,序列化/反序列化都有效;

3 属性排序 @JsonPropertyOrder,注释在类声明中;

4 属性格式转换 使用自定义序列化/反序列化来处理; @JsonSerialize,序列化; @JsonDeserialize,反序列化;

注意:在使用hibernate的时候,查询数据库后产生的实体类是个代理类,这时候转换JSON会报错; 解决方法有两种: 1)设置FAIL_ON_EMPTY_BEANS属性,告诉Jackson空对象不要抛异常; mapper.disable(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS); 2)使用@JsonIgnoreProperties注解 在实体类声明处加上@JsonIgnoreProperties(value ={"hibernateLazyInitializer ", "handler"})注解; 建议使用@JsonIgnoreProperties注解,这样生成的JSON中不会产生多余的字段;

5 父/子关联 @JsonManagedReference,放在父亲类中; @JsonBackReference,放在孩子类中;

6 去掉包装 @JsonUnwrapped,意思如下: Ability to map JSON like { "name" : "home", "latitude" : 127, "longitude" : 345 } to classes defined as: class Place { public String name;

@JsonUnwrapped public Location location; }

class Location { public int latitude, longitude; }