@JsonProperty和@JSONField注解的区别解析(最新)

 更新时间:2024年04月01日 11:15:17   作者:四问四不知  
Jackson是一款优秀的JSON解析库,添加了依赖之后就可以使用对应的注解,让我们能够自由的将Java对象和JSON做转换,这篇文章主要介绍了@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
    @Builder
    static 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注解的区别的文章就介绍到这了,更多相关@JsonProperty和@JSONField注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • intellij idea修改maven配置时总是恢复默认配置的解决方法idea版本(2020.2.x)

    intellij idea修改maven配置时总是恢复默认配置的解决方法idea版本(2020.2.x)

    这篇文章主要介绍了intellij idea修改maven配置时总是恢复默认配置的解决方法idea版本(2020.2.x),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 详解如何将已有项目改造为Spring Boot项目

    详解如何将已有项目改造为Spring Boot项目

    本篇文章主要介绍了如何将已有项目改造为Spring Boot项目,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java线程在什么情况下可以终止

    Java线程在什么情况下可以终止

    Thread线程类自带的stop方法,但是jdk不建议使用,因为stop方法终止线程只是强行终止,内存中部分值可能已发生变化,并未保证数据的一致性,将会导致线程安全问题,那么在什么情况下可以终止线程呢,本篇带你探究一下
    2022-04-04
  • java复制文件的4种方式及拷贝文件到另一个目录下的实例代码

    java复制文件的4种方式及拷贝文件到另一个目录下的实例代码

    这篇文章主要介绍了java复制文件的4种方式,通过实例带给大家介绍了java 拷贝文件到另一个目录下的方法,需要的朋友可以参考下
    2018-06-06
  • IDEA 每次新建工程都要重新配置 Maven的解决方案

    IDEA 每次新建工程都要重新配置 Maven的解决方案

    这篇文章主要介绍了IDEA 每次新建工程都要重新配置Maven解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Java中Optional类及orElse方法详解

    Java中Optional类及orElse方法详解

    这篇文章主要为大家介绍了Java中Optional类及orElse()方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • java实现上传图片尺寸修改和质量压缩

    java实现上传图片尺寸修改和质量压缩

    这篇文章主要为大家详细介绍了java实现上传图片尺寸修改和质量压缩,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Java自定义Spring配置标签

    Java自定义Spring配置标签

    这篇文章主要介绍了Java自定义Spring配置标签,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-08-08
  • 电脑上安装多个JDK版本时该如何自由切换(详细图文)

    电脑上安装多个JDK版本时该如何自由切换(详细图文)

    我们在学习的过程中经常用到不同的jdk版本,那么如何在一台电脑上同时安装多个jdk版本并进行切换呢,这篇文章主要给大家介绍了关于电脑上安装多个JDK版本时该如何自由切换的相关资料,需要的朋友可以参考下
    2023-10-10
  • Java窗口精细全方位讲解

    Java窗口精细全方位讲解

    这篇文章呢,将会系统的精细的教会铁铁们如何自己写一个完整的窗口;看完之后窗口稳拿下!!!所以呢由于详细,知识点多,可能有点长,铁铁们慢慢仔细阅读吧;文章写的还是一如既往快乐的,哈哈哈
    2021-08-08

最新评论