@JsonProperty和@JSONField注解的区别

2024-04-01 15:12

本文主要是介绍@JsonProperty和@JSONField注解的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JSON(JavaScript Object Notation)

json是一种常见的数据交换的轻量级数据格式。HTTP协议传输数据可以有多种数据格式,比如下面几种常见数据传输格式,除此之外还有其他的数据交换格式。

数据传输类型编码类型示例
表单格式application/x-www-form-urlencodedusername=zk&password=123
JSON(JavaScript Object Notation)application/json{"username": "zk","password": "123"}
XML(eXtensible Markup Language)application/xml<user><username>zk</username><password>123</password></user>

Jackson

Jackson是一款优秀的JSON解析库,添加了依赖之后就可以使用对应的注解,让我们能够自由的将Java对象和JSON做转换。在这里插入图片描述
比如Java对象转JSON
在这里插入图片描述

@JsonProperty和@JSONField

为了解决JSON字符串和其实体bean的属性名匹配不上的问题,@JsonProperty和@JSONField都可以将某一属性名序列化为另一属性名。

那么@JsonProperty和@JSONField有什么区别呢?

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.hust.zhang.serializable.JsonUtils;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;public class JsonPropertiesVsJsonField {@AllArgsConstructor@Data@Builderstatic class Properties {@JsonProperty(value = "json-properties")private String jsonProperties;@JSONField(name = "json-field")private String jsonField;}public static void main(String[] args) {Properties properties = Properties.builder().jsonProperties("test-properties").jsonField("test-field").build();System.out.println(JsonUtils.toJson(properties));System.out.println(JSON.toJSONString(properties));}
}

输出结果如下,

{"jsonField":"test-field","json-properties":"test-properties"}
{"json-field":"test-field","jsonProperties":"test-properties"}

可以看到调用JsonUtils.toJson方法时,加了@JsonProperty才与bean实际属性名匹配。
其中该方法定义如下,ObjectMapper的writeValueAsString方法。

/*** Json转换工具类*/
@Slf4j
public final class JsonUtils {/*** 私有无参构造方法 常量类不能实例化,直接引用*/private JsonUtils() {}private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();static {OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);OBJECT_MAPPER.configure(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature(), true);}public static String toJson(Object object) {try {return OBJECT_MAPPER.writeValueAsString(object);} catch (JsonProcessingException e) {log.error("Failed to write the object to string" + object.getClass().getName());return null;}}public static <T>T parse(String json, Class<T> tClass){try {return OBJECT_MAPPER.readValue(json,tClass);} catch (JsonProcessingException e) {log.error("Failed to deserialize JSON content, json value : " + json);return null;}}
}

除此之外还可以看看@JsonAlias注解。

参考链接

1、https://baijiahao.baidu.com/s?id=1765042798858921947&wfr=spider&for=pc
2、https://developer.aliyun.com/article/768691

这篇关于@JsonProperty和@JSONField注解的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/867483

相关文章

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

分辨率三兄弟LPI、DPI 和 PPI有什么区别? 搞清分辨率的那些事儿

《分辨率三兄弟LPI、DPI和PPI有什么区别?搞清分辨率的那些事儿》分辨率这个东西,真的是让人又爱又恨,为了搞清楚它,我可是翻阅了不少资料,最后发现“小7的背包”的解释最让我茅塞顿开,于是,我... 在谈到分辨率时,我们经常会遇到三个相似的缩写:PPI、DPI 和 LPI。虽然它们看起来差不多,但实际应用

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程