序列化Java对象重命名字段,@JSONField、
@JsonProperty、@Seri。。。
@JSONField
主要⽤于返回出参转换
这个注解分别可以注解在实体类的属性、setter和getter⽅法上
public class Test{
/*
注解在属性上的时候可以设置⼀些序列化、格式化的属性
@JSONField(serialize = false)---->序列化的时候忽略这个属性
@JSONField(format = "yyyyMMdd")---->序列化和反序列化额时候使⽤yyyyMMdd,⼀般在Date类型的字段上使⽤
*/
@JSONField(serialize = false)
public String Name;
/*
注解在set⽅法表⽰json转成bean的时候会将json中的Name属性赋值给实体类的Name
*/
@JSONField(name="Name")
public void setName(String Name){
this.Name = Name;
}
/*
注解在get⽅法表⽰bean转换成json的时候会把实体类的Name属性值赋给json的Name
*/
@JSONField(name="Name")
public String getName(){
return this.Name;
}
}
@JsonProperty
主要⽤于⼊参转换,和Json字符串序列化为Java对象
@JsonProperty是com.fasterxml.jackson.annotation下使⽤频率很⾼的⼀个常⽤注解,⽤于将json字符串中的某个字段和java对象中的某个属性进⾏匹配映射,同时可以将java对象中的属性转换为指定字段的json字符串。
在java属性上加上@JsonProperty注解:
@JsonProperty("jsonName")
private String name;
测试
@Test
public void testJsonProperty() throws IOException{
String jsonBean1 = "{\"jsonName\":\"xyz\",\"age\":\"12\",\"address\":\"china\"}";
ObjectMapper mapper = new ObjectMapper();
Object myBean1 = aderFor(MyBean.class).readValue(jsonBean1);
MyBean myBean = new MyBean("xyz", "China", 12);
json转换对象
}
运⾏结果
@SerializedName
@SerializedName是le.gson.annotations下的常⽤注解,作⽤和@JsonProperty差不多,重点是可以将多个字段名称映射到⼀个字段属性上
SerializedName 改变了默认序列化和默认反序列化的字段取值,所以,如果你使⽤ Gson 将 Java model 类⽣称 JSON 串,结果就是value 的名称就是字段的名称。
SerializedName 接受两个参数,value、alternate,第⼀个value是默认参数,如果你只填了⼀个参数,那这个值将会赋值给 value。
alternate 属性是⽤在反序列化上的,也就是说从 JSON 到 Java 类的过程。Gson 会帮我们匹配 JSON 中的命名,并尝试到⼀个字段映射。⽆论哪⼀个都会映射。
在java属性上加上@SerializedName注解:
@SerializedName("jsonName", alternate = "json_name, json")
private String name;
测试
@Test
public void testFromJeson() throws IOException {
String jsonBean1 = "{\"jsonName\":\"xyz\",\"age\":\"12\",\"address\":\"china\"}";
MyBean myBean = new MyBean("xyz", "China", 12);
// 注意:写法和@JsonProperty不同
Gson gson = new Gson();
MyBean myBean1 = gson.fromJson(jsonBean1, MyBean.class);
String toJson = Json(myBean);
}
运⾏结果
@JsonProperty和@SerializedName对⽐在Controller添加:
@RequestMapping("/student2")
public Student getStudentByJson(){
Gson gson = new Gson();
String studentJson = "{studentName:张三,studentAge:25}";
Student  stu = gson.fromJson(studentJson,Student.class);
return stu;
}
访问得到:
{"stuName":null,"stuAge":null}
加⼊@SerializedName注解
@Data
public class Student {
@JsonProperty("stuName")
@SerializedName("studentName")
private String name;
@SerializedName("studentAge")
@JsonProperty("stuAge")
private Integer age;
}
再次访问项⽬:
{"stuName":"张三","stuAge":25}
总结:
@JsonProperty使对象属性输出为@JsonProperty内的内容。@SerializedName使对象属性序列化为想要的值
官⽹:
1.
2.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。