@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") 反序列化时候给前台的数据格式化了
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
) 序列化时候前台给后台的数据存库格式化
private Date submitdate;
js中格式化时间:var time= cpic.getSystemTime();
time.format("yyyy-MM-dd");
*****************************************************
遇到一个问题,前端按照平常方式传给我json对象,属性名和我一致,我在controller层也按平常方式使用@RequestBody注解,用相应的实体类接收参数,但别人可以成功接到参数,而我的却不能,在实体类的成员变量上增加@JsonProperty("属性名"),就解决了问题
查了一下这个注解:
@JsonProperty 此注解用于属性上,作用是把该属性的名称反序列化为另外一个名称,如把trueName属性反序列化为name,返回前端
@JsonProperty("name")。
import com.fasterxml.jackson.annotation.JsonProperty;
public class Student implements Serializable{
@JsonProperty("name")
private String trueName;
public String getTrueName() {
return trueName;
}
public void setTrueName(String trueName) {
this.trueName = trueName;
}
}
测试一下
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) throws JsonProcessingException {
Student student = new Student();
student.setTrueName("张三");
//使用writeValuesAsString的方法就可以把对角转化成json字符串。
System.out.println(new ObjectMapper().writeValueAsString(student));
}
}
得到结果
{"name":"张三"}
注意事项:类和父类必须都实现序列化后,才可以反序列化,类没有实现序列化,也可以使用此注解序列化
感觉这个注解的作用是:1.前端传参数过来的时候,使用这个注解,可以获取到前端与注解中同名的属性 2。后端处理好结果后,返回给前端的属性名也不以实体类属性名为准,而以注解中的属性名为准
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)private String message;
可以将值返回前端时候忽略掉,比如密码不需要显示在前端数据中
但是从前端传送给后端时候可以保存到数据库中
JsonProperty.Access.READER_ONLY 就是读
******************************
Jackson相关:
使用Jackson相关的注解时一定要注意自己定义的属性命名是否规范。
命名不规范时会失去效果。(例如Ename ,Eage 为不规范命名。“nameE”,“ageE”为规范命名)我在此处掉坑半个小时。至于命名规范,大家自己搜索。其实不要太奇葩的命名都是可以得。
如果使用@JsonIgnore注解不起效时请注意一下你的属性名字是否规范
1、@JsonIgnoreProperties
此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
写法将此标签加在model 类的类名上 ,可以多个属性也可以单个属性
//生成json时将name和age属性过滤
@JsonIgnoreProperties({"name"},{"age"})
public class user {
private String name;
private int age;
}
//生成json时将name和age属性过滤
@JsonIgnoreProperties({"name"},{"age"})
public class user {
private String name;private int age;
}
2、@JsonIgnore
此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。
生成json 时不生成age 属性
public class user {
private String name;
@JsonIgnore
private int age;
}
3、@JsonFormat
此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如@JsonFormat(pattern = “yyyy-MM-dd HH-mm-ss”)
4、@JsonSerialize
此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。
5、@JsonDeserialize
此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize
6、@Transient
@[email protected]�射,ORM框架将忽略该属性;
如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic;
//表示该字段在数据库表中没有
@Transient
public int getAge() {
return 1+1;
}