最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中@JSONField和@JsonProperty注解的用法及區(qū)別詳解

 更新時(shí)間:2024年06月07日 09:53:51   作者:MinggeQingchun  
@JsonProperty和@JSONField注解都是為了解決obj轉(zhuǎn)json字符串的時(shí)候,將java bean的屬性名替換成目標(biāo)屬性名,下面這篇文章主要給大家介紹了關(guān)于Java中@JSONField和@JsonProperty注解的用法及區(qū)別的相關(guān)資料,需要的朋友可以參考下

前言

@JSONField注解是阿里巴巴的fastjson框架中的注解,用于指定JSON字符串中的屬性名和Java對(duì)象中的屬性名之間的映射關(guān)系

@JsonProperty注解是Jackson框架中的注解,用法類似于@JSONField,也是指定JSON字符串中的屬性名和Java對(duì)象中的屬性名之間的映射關(guān)系

一、@JSONField

@JSONField注解是阿里巴巴的fastjson框架中的注解,用于指定JSON字符串中的屬性名和Java對(duì)象中的屬性名之間的映射關(guān)系

1、name屬性

通過(guò)name屬性可以指定將Java對(duì)象中的屬性名映射為JSON對(duì)象中的屬性名。默認(rèn)情況下,JSON對(duì)象中的屬性名與Java對(duì)象中的屬性名相同

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

public class Test1Controller {
    public static void main(String[] args) {
        String str = "{\"ID\":11,\"Name\":\"張三\"}";

        User user = JSON.parseObject(str, User.class);
        System.out.println("User對(duì)象:" + user.toString());
    }
}

@Data
class User {
    @JSONField(name = "ID")
    private Integer userId;
    @JSONField(name = "Name")
    private String userName;

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                '}';
    }
}

2、format屬性

通過(guò)format屬性可以指定日期類型屬性的格式,以及將數(shù)字類型轉(zhuǎn)為字符串類型的格式

public class User {
    @JSONField(format = "yyyy-MM-dd")
    private Date birthday;
    @JSONField(format = "#,###.00")
    private double salary;
}

3、serialize屬性

通過(guò)serialize屬性可以控制屬性是否序列化到JSON對(duì)象中

當(dāng)serialize屬性為false時(shí),屬性將不會(huì)序列化到JSON對(duì)象中,默認(rèn)為true

public class User {
    @JSONField(serialize = false)
    private int userId;
    private String name;
    private int age;
}

使用@JSONField注解將userId屬性從序列化中排除

4、deserialize屬性

通過(guò)deserialize屬性可以控制是否將JSON對(duì)象中的屬性反序列化到Java對(duì)象中

當(dāng)deserialize屬性為false時(shí),該屬性將不會(huì)從JSON對(duì)象中反序列化到Java對(duì)象中,默認(rèn)為true

public class User {
    private int userId;
    private String name;
    @JSONField(deserialize = false)
    private int age;
}

使用@JSONField注解將age屬性從反序列化中排除

5、ordinal屬性

通過(guò)ordinal屬性可以指定屬性的順序

默認(rèn)情況下,屬性的順序是按照屬性在Java對(duì)象中的順序排列的

public class User {
    @JSONField(ordinal = 2)
    private String name;
    @JSONField(ordinal = 1)
    private int age;
}

使用@JSONField注解指定了age屬性的順序?yàn)?,name屬性的順序?yàn)?

6、defaultValue屬性

通過(guò)defaultValue屬性可以指定屬性在Java對(duì)象中的默認(rèn)值

public class User {
    @JSONField(defaultValue = "0")
    private int userId;
    @JSONField(defaultValue = "N/A")
    private String name;
    private int age;
}

使用@JSONField注解指定了userId屬性的默認(rèn)值為0,name屬性的默認(rèn)值為“N/A”

7、type屬性

通過(guò)type屬性可以指定屬性的類型

public class User {
    private int userId;
    @JSONField(type = FieldType.STRING)
    private int age;
}

使用@JSONField注解指定了age屬性的類型為字符串類型

8、jsonDirect屬性

通過(guò)jsonDirect屬性可以指定屬性是否應(yīng)該直接輸出為JSON字符串

默認(rèn)情況下,屬性將被轉(zhuǎn)化為字符串并以引號(hào)標(biāo)記輸出

public class User {
    private String name;
    @JSONField(jsonDirect = true)
    private String jsonMessage;
}

使用@JSONField注解指定了jsonMessage屬性應(yīng)該直接輸出為JSON字符串

9、parseFeatures屬性和serializeFeatures屬性

通過(guò)parseFeatures屬性和serializeFeatures屬性可以配置解析和序列化時(shí)的特性

具體可參考阿里巴巴fastjson的文檔

public class User {
    private String name;
    private int age;
    @JSONField(parseFeatures = Feature.AllowSingleQuotes)
    private String message;
}

二、@JsonProperty

@JsonProperty注解是Jackson框架中的注解,用法類似于@JSONField,也是指定JSON字符串中的屬性名和Java對(duì)象中的屬性名之間的映射關(guān)系

1、value

value屬性用于指定序列化后的屬性名稱

如果未提供value屬性,則屬性名稱默認(rèn)與Java屬性名稱相同

public class Person {
    @JsonProperty("name")
    private String fullName;
}

將Java對(duì)象中fullName屬性序列化為JSON對(duì)象中的"name"屬性

2、defaultValue

defaultValue屬性用于指定當(dāng)Java對(duì)象屬性值為null時(shí),序列化為JSON時(shí)使用的默認(rèn)值

該屬性僅適用于對(duì)象屬性而不適用于基本類型屬性

public class Person {
    @JsonProperty(defaultValue = "John")
    private String firstName;
}

將未設(shè)置firstName的Person對(duì)象序列化為含有默認(rèn)值"John"的JSON屬性

3、access

access屬性用于指定Java屬性的訪問(wèn)級(jí)別

默認(rèn)訪問(wèn)級(jí)別為PUBLIC,也可以設(shè)為READ_ONLY或WRITE_ONLY

public class Person {
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;
}

將Java對(duì)象中的password屬性序列化為JSON時(shí)忽略掉

4、required

required屬性指定此屬性是否為必須字段

如果為true,則當(dāng)將JSON轉(zhuǎn)換回Java對(duì)象時(shí),如果該屬性不存在,則將引發(fā)異常

public class Person {
    @JsonProperty(required = true)
    private String name;
}

將Java對(duì)象中的name屬性序列化為確保其在JSON對(duì)象中存在

5、defaultValue

defaultValue屬性用于指定Java屬性的默認(rèn)值

在將JSON轉(zhuǎn)換回Java對(duì)象時(shí)如果該屬性不存在或?yàn)閚ull,則使用默認(rèn)值

public class Person {
    @JsonProperty(defaultValue = "30")
    private int age;
}

將Java對(duì)象中的age屬性序列化為JSON時(shí),如果該屬性不存在,則使用默認(rèn)值30

6、index

index屬性用于指定序列化的屬性在JSON對(duì)象中的位置,數(shù)值越小,位置越靠前

public class Person {
    @JsonProperty(index = 1)
    private String firstName;
    @JsonProperty(index = 0)
    private String lastName;
}

將Java對(duì)象中的lastName屬性序列化為JSON對(duì)象中的第一個(gè)屬性,firstName屬性序列化為JSON對(duì)象中的第二個(gè)屬性

7、accessMode

accessMode屬性用于指定序列化時(shí)使用的訪問(wèn)模式

如果未指定,則默認(rèn)為PROPETY模式,即訪問(wèn)getter方法獲取屬性值。另一個(gè)可用的模式是FIELD,即直接訪問(wèn)Java屬性

public class User {
    private String firstName;
    @JsonProperty(access = JsonProperty.Access.READ_ONLY, accessMode = JsonProperty.AccessMode.FIELD)
    private String lastName;
}

將Java對(duì)象中l(wèi)astName屬性序列化為JSON屬性,直接訪問(wèn)Java屬性值。

8、ignore

ignore屬性用于指定是否忽略該屬性

如果為true,則在序列化和反序列化時(shí)忽略該屬性

public class User{
    private String firstName;
    @JsonProperty(ignore = true)
    private String lastName;
}

將Java對(duì)象中的lastName屬性忽略掉,不進(jìn)行序列化和反序列化

三、@JSONField和@JsonProperty區(qū)別

1、@JSONField注解的使用方式更加簡(jiǎn)單,注解默認(rèn)的值與屬性名相同,而@JsonProperty需要手動(dòng)指定屬性名

2、@JSONField注解支持更多的屬性映射選項(xiàng),例如序列化時(shí)的日期格式,空值的處理方式等

3、@JSONField注解的性能較快,因?yàn)閒astjson本身就是一款高性能的JSON處理庫(kù)

4、在使用Jackson框架時(shí),只能使用@JsonProperty注解,無(wú)法使用@JSONField注解?。?!不然會(huì)導(dǎo)致解析失敗,無(wú)法取到值,如下

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

public class Test1Controller {
    public static void main(String[] args) {
        String str = "{\"ID\":11,\"Name\":\"張三\"}";

        User user = JSON.parseObject(str, User.class);
        System.out.println("User對(duì)象:" + user.toString());
    }
}

@Data
class User {
    @JsonProperty("ID")
    private Integer userId;
    @JsonProperty("Name")
    private String userName;

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                '}';
    }
}

總結(jié) 

到此這篇關(guān)于Java中@JSONField和@JsonProperty注解的用法及區(qū)別的文章就介紹到這了,更多相關(guān)Java @JSONField和@JsonProperty注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?Boot與Spring?MVC?Spring對(duì)比及核心概念

    Spring?Boot與Spring?MVC?Spring對(duì)比及核心概念

    這篇文章主要為大家介紹了Spring?Boot與Spring?MVC?Spring的對(duì)比以及你需要了解的核心概念,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • 一文詳解查看java死鎖具體怎么做以及怎么避免

    一文詳解查看java死鎖具體怎么做以及怎么避免

    死鎖的產(chǎn)生源于資源爭(zhēng)奪的無(wú)序性,其核心是四大必要條件的同時(shí)滿足,這篇文章主要介紹了查看java死鎖具體怎么做以及怎么避免的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-10-10
  • Java中IO和NIO的區(qū)別詳細(xì)解析

    Java中IO和NIO的區(qū)別詳細(xì)解析

    這篇文章主要介紹了Java中IO和NIO的區(qū)別詳細(xì)解析,IO和NIO有相同的作用和目的,但實(shí)現(xiàn)方式不同,NIO主要用到的是塊,所以NIO的效率要比IO快不少,需要的朋友可以參考下
    2023-11-11
  • SpringBoot整合mybatis通用Mapper+自定義通用Mapper方法解析

    SpringBoot整合mybatis通用Mapper+自定義通用Mapper方法解析

    這篇文章主要介紹了SpringBoot整合mybatis通用Mapper+自定義通用Mapper方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot源碼 PropertySource解析

    SpringBoot源碼 PropertySource解析

    PropertySource是spring中對(duì)于鍵值屬性的一種抽象,主要是name和sourcePropertyResolver是對(duì)PropertySource提供對(duì)外的統(tǒng)一數(shù)據(jù)處理,對(duì)于占位符的處理委托于PropertyPlaceholderHelper,對(duì)Springboot?源碼 PropertySource相關(guān)知識(shí)感興趣的朋友一起看看吧
    2023-01-01
  • 概述Java的struts2框架

    概述Java的struts2框架

    本篇文章主要對(duì)struts2框架概念、優(yōu)缺點(diǎn)進(jìn)行簡(jiǎn)要概述。相信會(huì)對(duì)大家學(xué)習(xí)Java有所幫助,需要的朋友一起來(lái)看下吧
    2016-12-12
  • 基于springboot redirect重定向路徑問(wèn)題總結(jié)

    基于springboot redirect重定向路徑問(wèn)題總結(jié)

    這篇文章主要介紹了springboot redirect重定向路徑問(wèn)題總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • JavaPoet的使用指南小結(jié)

    JavaPoet的使用指南小結(jié)

    這篇文章主要介紹了JavaPoet的使用指南小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • java處理解析帶有反斜杠的json

    java處理解析帶有反斜杠的json

    在Java中操作JSON數(shù)據(jù)是一項(xiàng)常見(jiàn)的任務(wù),其中一個(gè)常見(jiàn)的問(wèn)題是如何在JSON字符串中包含反斜杠,本文主要介紹了java處理解析帶有反斜杠的json,感興趣的可以了解一下
    2024-01-01
  • Java中注解@JsonFormat的用法詳解

    Java中注解@JsonFormat的用法詳解

    這篇文章主要給大家介紹了關(guān)于Java中注解@JsonFormat用法的相關(guān)資料,以及分享了@JsonFormat 將枚舉序列化為對(duì)象的方法,文中給出了詳細(xì)的代碼實(shí)例,需要的朋友可以參考下
    2023-01-01

最新評(píng)論

衡阳县| 嘉禾县| 香河县| 尚义县| 呼和浩特市| 咸丰县| 从江县| 治县。| 平果县| 盐津县| 盈江县| 东源县| 团风县| 八宿县| 卫辉市| 峡江县| 临城县| 广汉市| 襄城县| 兴安盟| 广州市| 喀什市| 乳山市| 鹤岗市| 宜阳县| 剑河县| 太湖县| 汕头市| 东兰县| 铜鼓县| 佛冈县| 思南县| 兴山县| 定陶县| 高青县| 兰州市| 芮城县| 辽阳市| 苍溪县| 南靖县| 固镇县|