前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >序列化Java对象重命名字段,@JSONField、@JsonProperty、@SerializedName

序列化Java对象重命名字段,@JSONField、@JsonProperty、@SerializedName

作者头像
chenchenchen
发布2021-09-06 14:21:01
8.8K0
发布2021-09-06 14:21:01
举报
文章被收录于专栏:chenchenchenchenchenchen

@JSONField

主要用于返回出参转换

这个注解分别可以注解在实体类的属性、setter和getter方法上

代码语言:javascript
复制
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对象

@JsonPropertycom.fasterxml.jackson.annotation下使用频率很高的一个常用注解,用于将json字符串中的某个字段和java对象中的某个属性进行匹配映射,同时可以将java对象中的属性转换为指定字段的json字符串。

在java属性上加上@JsonProperty注解:

代码语言:javascript
复制
    @JsonProperty("jsonName")
    private String name;

测试

代码语言:javascript
复制
    @Test
    public void testJsonProperty() throws IOException{
        String jsonBean1 = "{\"jsonName\":\"xyz\",\"age\":\"12\",\"address\":\"china\"}";
        ObjectMapper mapper = new ObjectMapper();
        Object myBean1 = mapper.readerFor(MyBean.class).readValue(jsonBean1);
 
        System.err.println("Convert json to java: "+ myBean1.toString());
 
        MyBean myBean = new MyBean("xyz", "China", 12);
        System.err.println("Conver java to json: " + mapper.writeValueAsString(myBean));
    }

运行结果

在这里插入图片描述
在这里插入图片描述

@SerializedName

@SerializedNamecom.google.gson.annotations下的常用注解,作用和@JsonProperty差不多,重点是可以将多个字段名称映射到一个字段属性上

SerializedName 改变了默认序列化和默认反序列化的字段取值,所以,如果你使用 Gson 将 Java model 类生称 JSON 串,结果就是 value 的名称就是字段的名称。

SerializedName 接受两个参数,value、alternate,第一个value是默认参数,如果你只填了一个参数,那这个值将会赋值给 value。

alternate 属性是用在反序列化上的,也就是说从 JSON 到 Java 类的过程。Gson 会帮我们匹配 JSON 中的命名,并尝试找到一个字段映射。无论哪一个都会映射。

在java属性上加上@SerializedName注解:

代码语言:javascript
复制
    @SerializedName("jsonName", alternate = "json_name, json")
    private String name;

测试

代码语言:javascript
复制
    @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);
        System.err.println("jesonBean1: "+ myBean1.toString());
 
        String toJson = gson.toJson(myBean);
        System.err.println("toJson: " + toJson);
    }

运行结果

在这里插入图片描述
在这里插入图片描述

@JsonProperty和@SerializedName对比

在Controller添加:

代码语言:javascript
复制
@RequestMapping("/student2")
public Student getStudentByJson(){
    Gson gson = new Gson();
    String studentJson = "{studentName:张三,studentAge:25}";
    Student  stu = gson.fromJson(studentJson,Student.class);
    return stu;
}

访问得到:

代码语言:javascript
复制
{"stuName":null,"stuAge":null}

加入@SerializedName注解

代码语言:javascript
复制
@Data
public class Student {
    @JsonProperty("stuName")
    @SerializedName("studentName")
    private String name;
    @SerializedName("studentAge")
    @JsonProperty("stuAge")
    private Integer age;
}

再次访问项目:

代码语言:javascript
复制
{"stuName":"张三","stuAge":25}

总结:

@JsonProperty使对象属性输出为@JsonProperty内的内容。

@SerializedName使对象属性序列化为想要的值

官网:

  1. https://www.baeldung.com/jackson-annotations
  2. http://www.javacreed.com/simple-gson-example/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • @JSONField
  • @JsonProperty
  • @SerializedName
  • @JsonProperty和@SerializedName对比
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档