以下几个注解主要来自于JACKSON包的注解.
jackson-databind-x.x.x.jar
后台查询出来的数据,有时不需要直观的展示到前台,像时间(Date,Timestamp)或者Double(取精度)的时候,需要转化下推送给前台..这时转化成json的时候需要做些处理.
Hibernate JPA中常用的注解主要有:@Transient,@JsonIgnoreProperties,@JsonIgnore,@JsonFormat,@JsonSerialize,@JsonDeserialize
表示该属性不是实体类对应的数据库表中的字段,ORM框架将忽略该属性的数据库匹配;
注解了@Transient的字段在数据库映射时,不会参与映射..无注解时,ORM框架默认其注解为@Basic(很恐怖吧)
个人感觉这个注解也是一个蛮好用的注解;该注解的作用域是属性上,匹配value值.前台指定的数据类型不符时,使用@JsonProperty进行转换.如后台实体类上使用的是telphone,因为很多地方已经使用了...修改的话比较麻烦,而现在要求使用的是phone,所以用该注解就贼爽了.....
@JsonProperty(value = "phone")
private String telphone;
@JsonIgnoreProperties是类注解,作用于在类上,多个值时,用value值来执行忽略@JsonIgnoreProperties(value = {"fullName", "comment"})
@JsonIgnore
用于属性或者方法上(最好是属性上),生成json格式的数据时,忽略当前作用域的属性值;
@JsonIgnoreProperties和@JsonIgnore作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
@JsonFormat作用域在属性或者方法上.可以方便的把Date类型直接转化为我们想要的模式.如@JsonFormat(pattern="yyyy-MM-dd HH-mm-ss")
@JsonSerialize注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。
@JsonDeserialize注解用于属性或者getter方法上面,用于在反序列化时嵌入兹定于的代码.与@JsonSerialize相反
DEMO:
一开始写代码的时候就是因为一个实体类的中的时间属性,返回给前台是时间戳(Timestamp)的类型,导致前台展示很垃圾...
后来想自己封装一个实体类,重新转化下这个结果集,但是因为一个字段,导致要新建很多的实体类对象..很是尴尬..
想java肯定能实现这种方式,所以就有了上文的这一块东西...
附转化代码:
实体类中的一个属性
@JsonSerialize(using=DateSerialize.class)
private Timestamp startTime;
DateSerialize实现接口类
public class DateSerialize extends JsonSerializer{
@Override
public void serialize(Timestamp timestamp,JsonGenerator jsonGenerator,SerializerProvider serializerProvider) throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonGenerator.writeString(sdf.format(new Date(timestamp.getTime())));
}
}
这样直接将对象或者对象数组返回给前台的结果中就是我们在DateSerialize中约束的yyyy-MM-dd HH:mm:ss格式了...
同理,如果要使用Double保留指定的精度问题也是如此;