@JSONField与@JsonProperty的不同使用场景

前言

已知@JSONField与@JsonProperty两个注解都是加在bean的属性上,用在对象在转化成Json对象时将对应的字段进行特殊处理。
但是两者的看起来作用似乎相同,所以在使用时有时会出现混淆,本文以几个常用的使用场景为例,尽量说明它们之间的区别。

@JSONField

所属组件

@JSONField 注解来自于如下包:com.alibaba.fastjson.annotation.JSONField
可以看出是属于fastjson组件中的类,而fastjson是常见的JSON库,使用频率很高。

使用场景

那么,既然是fastjson库中的注解,所以要在使用fastjson中的组件进行bean转JSON字符串时才会生效,比如:

// JSON是fastjson包中的
JSON.toJSON(event)

@JsonProperty

所属组件

@JSONField 注解来自于如下包:com.fasterxml.jackson.annotation.JsonProperty
可以看出是属于jackson组件中的类,但是好像项目中没有主动引用过jackson组件?
查看pom依赖的引用树:
spring-boot-starter-web引用了jackson
可以看到java开发中常见的spring-boot-starter-web依赖,其底层引用了jackson-core这个包,而@JsonProperty注解就是在这个包中的。

使用场景

所以,我们可以说spring boot官方对Json对象的操作是使用了jackson组件。
以下列举两个常见的影响范围:

  1. 控制层方法入参中常用的@RequestBody注解
  2. 控制层直接返回实体对象

@RequestBody

前端使用POST方式向后端传输Json字符串时,我们一般会使用@RequestBody注解修饰对应的控制层方法的入参对象,使得Json字符串中的内容能够映射到一个实体类中,而这个过程就是使用了jackson的@JsonProperty注解。

控制层直接返回实体对象

控制层直接返回实体对象时,并不是调用了对象的toString方法,而是自动调用jackson组件完成对象的Json序列化。

总结

@JSONField与@JsonProperty隶属两个不同的包,前者是阿里系的fastjson包,后者是spring boot官方使用的jackson包。
一般的,在使用spring框架自动生成或解析Json相关的数据时,会调用jackson包,@JsonProperty会生效;在手动引入fastjson组件并进行对应的Json对象(反)序列化时,@JSONField会生效,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
@JSONField和@JsonProperty是两个不同的注解,用于处理JSON序列化和反序列化的过程。 @JSONField是阿里巴巴的fastjson库中的注解,用于在属性或方法上进行标记,以控制JSON序列化和反序列化的行为。它可以设置一些属性,比如serialize、deserialize、format等来控制序列化和反序列化的过程。当注解在属性上时,可以设置serialize=false来忽略该属性的序列化,同时可以设置format来指定日期格式化的方式。当注解在get方法上时,表示在将Java对象转换为JSON字符串时,将该方法返回的值作为JSON字段的值。当注解在set方法上时,表示在将JSON字符串转换为Java对象时,将该方法设置的值赋给对应的属性。 @JsonProperty是Jackson库中的注解,也是用于在属性或方法上进行标记,以控制JSON序列化和反序列化的过程。它的作用和@JSONField类似,可以设置value属性来指定JSON字段的名称。当注解在属性上时,表示该属性在序列化和反序列化过程中对应的JSON字段名称。当注解在get方法上时,表示在将Java对象转换为JSON字符串时,将该方法返回的值作为JSON字段的值。当注解在set方法上时,表示在将JSON字符串转换为Java对象时,将该方法设置的值赋给对应的属性。 所以,@JSONField和@JsonProperty都是用于控制JSON序列化和反序列化的注解,它们有一些相似的功能和用法,但是属于不同的库。在使用时需要根据具体的需求和所使用JSON库选择合适的注解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值