【Springboot】中@JsonProperty和@JSONField用法和区别

Springboot中@JsonProperty和@JSONField用法和区别

背景

2个注解都是为了解决json字符串的某些属性名和JavaBean中的属性名匹配不上的问题。

@JsonProperty

该注解为jackson包下的,在spring-boot-starter-web启动器下已经存在(com.fasterxml.jackson.core:jackson-databind:2.10.4)。
使用方法,在bean属性或方法上加上该注解

@Data
@Accessors(chain = true)
public class Man {
    @JsonProperty(value = "com_code")
    private String companyCode;
}
Man man = new Man().setCompanyCode("Google");
System.out.println(man);                                                                // Man(companyCode=Google)
System.out.println(new ObjectMapper().writeValueAsString(man));                         // {"com_code":"Google"}

System.out.println(new ObjectMapper().readValue("{\"com_code\": \"xin\"}", Man.class)); // Man(companyCode=xin)
// com.gd.mall.util.JacksonUtil

在使用自定义getset方法时发现会出现重复字段,查看编译过后的@lombok发现生成的方法与自定义的无区别但是不会出现重复字段
出现重复字段解决办法,@JsonProperty改为加在get方法上(详细介绍请参考文档)

@JSONField

该注解为fastjson包下的,com.alibaba:fastjson:1.2.24
使用方法与@JsonProperty一致

@Data
@Accessors(chain = true)
public class Man {
    @JSONField(name = "com_code")
    private String companyCode;
}
Man man = new Man().setCompanyCode("Google");
System.out.println(man);                                                    // Man(companyCode=Google)
System.out.println(JSON.toJSONString(man));                                 // {"com_code":"Google"}

System.out.println(JSON.parseObject("{\"com_code\": \"xin\"}", Man.class)); // Man(companyCode=xin)

注意

需要注意的是在使用这2个注解进行转换时必须使用相应的方法否则不起作用(fastjson、jackson)

如果你用的是@JsonProperty注解,那么你千万不要用JSON.toJSONString(实体)去转json,因为他们根本就不配套,可能很多人在这里就蒙蔽了,为什么网上复制过来的转换不了,实际上很多文章只是复制粘贴,根本没有实际执行过,JSON.toJSONString(实体)实际上是fastjson包里面的方法,他不会处理@JsonProperty上设置的“别名”。正确的写法是:ObjectMapper().writeValueAsString(实体类)。
另外一种方法就是用fastjson包提供的@JSONField(当然这个注解还有很多其他功能,比如格式化时间等,这里不做阐述)。如果用了此注解的属性字段,那就需要用JSON.toJSONString(实体)或者JSONObject.toJSONString(实体)。

忽略属性注解

fastjson忽略属性注解为@JSONField(serialize = false)
jackson忽略属性注解为@JsonIgnore

参考文档

  1. Springboot中使用@JsonProperty和@JSONField
  2. @JsonProperty 和@JSONField用法和区别
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值