欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot?通過FastJson實(shí)現(xiàn)bean對(duì)象和Json字符串互轉(zhuǎn)問題

 更新時(shí)間:2022年08月19日 08:53:45   作者:算死草  
這篇文章主要介紹了Springboot?通過FastJson實(shí)現(xiàn)bean對(duì)象和Json字符串互轉(zhuǎn),本文嘗試驗(yàn)證兩種場(chǎng)景給大家詳細(xì)介紹,對(duì)Springboot?FastJson實(shí)現(xiàn)bean和Json互轉(zhuǎn)問題,感興趣的朋友一起看看吧

Json格式在后臺(tái)服務(wù)中的重要性就不多說了,直入正題。
首先引入pom文件,這里使用的是1.2.83版本

 <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
             <version>1.2.83</version>
         </dependency>

接著我們嘗試驗(yàn)證兩種場(chǎng)景
1、Model對(duì)象轉(zhuǎn)Json字符串
2、Json字符串轉(zhuǎn)Model對(duì)象
在驗(yàn)證之前我們需要先編寫一個(gè)model類,這個(gè)model類的字段我們可以使用fastJson中的注解@JSONField來修飾,并添加name值。
這個(gè)注解的作用,將該model類的字段和對(duì)應(yīng)的json對(duì)象的key相對(duì)應(yīng)起來。(防盜連接:本文首發(fā)自 )
當(dāng)然你也可以不添加該注解,這樣就相當(dāng)于使用了字段名稱本身與json對(duì)象的key建立映射。
為了盡可能的展示各種場(chǎng)景,我在下邊的model 示例中,使用了好幾種場(chǎng)景
1、注解的name值與字段值相同
2、注解的name值與字段值不同
3、不設(shè)置注解
4、作用在復(fù)雜引用類型上
5、作用在基本類型上
7、作用在容器上

如圖

@Data
public class ProjectModel {
    @JSONField(name = "projectName")
    private String projectName;
    @JSONField(name = "projectId")
    private int id;
    private List<String> userIdList;
    @JSONField(name = "userBeanList")
    private List<User> userList;
    @JSONField(name = "adminUser")
    private User adminUser;

    @Data
    public static class User {
        @JSONField(name = "user-id")
        private String userId;
        private String user_Name;
    }
}

接下來我們開始驗(yàn)證:
場(chǎng)景一、Model對(duì)象轉(zhuǎn)Json字符串

@PostConstruct
    public void handleConvertJson() {
        ProjectModel projectModel= createProjectModel();
        String projectJson = JSON.toJSONString(projectModel);
        System.out.println(projectJson);
    }
    private ProjectModel createProjectModel() {
        ProjectModel projectModel = new ProjectModel();
        projectModel.setId(999);
        projectModel.setProjectName("p-1");
        List<String> userIdList = new ArrayList<>();
        userIdList.add("3");
        userIdList.add("2");
        userIdList.add("1");
        projectModel.setUserIdList(userIdList);

        ProjectModel.User adminUser=new ProjectModel.User();
        adminUser.setUser_Name("admin");
        adminUser.setUserId("0");
        projectModel.setAdminUser(adminUser);

        List<ProjectModel.User> userList = new ArrayList<>();
        ProjectModel.User user3 = new ProjectModel.User();
        user3.setUserId("3");
        user3.setUser_Name("name3");
        userList.add(user3);
        ProjectModel.User user2 = new ProjectModel.User();
        user2.setUserId("2");
        user2.setUser_Name("name2");
        userList.add(user2);
        projectModel.setUserList(userList);
        return projectModel;
    }

執(zhí)行結(jié)果格式化后如下

{
"adminUser": {
"user-id": "0",
"user_Name": "admin"
},
"projectId": 999,
"projectName": "p-1",
"userBeanList": [
{
"user-id": "3",
"user_Name": "name3"
},
{
"user-id": "2",
"user_Name": "name2"
}
],
"userIdList": [
"3",
"2",
"1"
]
}

注意看,(防盜連接:本文首發(fā)自)如果model類字段設(shè)置了JSONField注解的話,則優(yōu)先級(jí)最高,如果未設(shè)置該注解的話,則按照model類中字段的名稱進(jìn)行設(shè)置。而基本類型、復(fù)雜類型、復(fù)雜類型容器等場(chǎng)景均支持。
場(chǎng)景二、Model對(duì)象轉(zhuǎn)Json字符串
新增代碼如下:

@PostConstruct
    public void handleJson2() {
        String newSourceJson="{\"projectId\":999,\"projectName\":\"p-1\"," +
                "\"userBeanList\":[{\"userId\":\"3\",\"user_Name\":\"name3\"},{\"user-id\":\"2\"," +
                "\"user_Name\":\"name2\"}],\"userIdList\":[\"3\",\"2\",\"1\"]}";
        ProjectModel newProject = JSONObject.parseObject(newSourceJson,
                ProjectModel.class);
        String newProjectJson = JSON.toJSONString(newProject);
        System.out.println(newSourceJson);
        System.out.println(newProjectJson);
    }

Json串我們使用場(chǎng)景1的輸出,但是稍作修改:刪掉adminUser,同時(shí)注意userBeanList容器中的元素,兩個(gè)id的key不一樣,一個(gè)叫做userId(類字段名),一個(gè)叫做user-id(JSONField的name值)。然后再將對(duì)象轉(zhuǎn)為Json串,用這兩個(gè)Json串進(jìn)行比較:

經(jīng)過轉(zhuǎn)換后,userId字段消失了,這是由于null值不會(huì)被序列化出來的緣故。也從側(cè)面證明了反序列化時(shí),如果@JSONField存在的話,必須要與@JSONField值保持一致,否則字段值不會(huì)寫入。如圖:

另外我們補(bǔ)充一個(gè)特殊情況情況,Model對(duì)象的字段為null轉(zhuǎn)Json串時(shí),如何保留null值:(防盜連接:本文首發(fā)自)
注意第8行的轉(zhuǎn)換增加了參數(shù)SerializerFeature.WriteMapNullValue

@PostConstruct
    public void handleJson3() {
        String newSourceJson="{\"projectId\":999,\"projectName\":\"p-1\"," +
                "\"userBeanList\":[{\"userId\":\"3\",\"user_Name\":\"name3\"},{\"user-id\":\"2\"," +
                "\"user_Name\":\"name2\"}],\"userIdList\":[\"3\",\"2\",\"1\"]}";
        ProjectModel newProject = JSONObject.parseObject(newSourceJson,
                ProjectModel.class);
        String newProjectJson=JSON.toJSONString(newProject, SerializerFeature.WriteMapNullValue);
        System.out.println(newSourceJson);
        System.out.println(newProjectJson);
    }

效果如下,生成的json串會(huì)保留null字段

到此這篇關(guān)于Springboot通過FastJson實(shí)現(xiàn)bean對(duì)象和Json字符串互轉(zhuǎn)的文章就介紹到這了,更多相關(guān)SpringbootFastJson實(shí)現(xiàn)bean和Json互轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java接口冪等性設(shè)計(jì)原理解析

    Java接口冪等性設(shè)計(jì)原理解析

    這篇文章主要介紹了Java接口冪等性設(shè)計(jì)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java項(xiàng)目工程代碼深度刨析總結(jié)

    Java項(xiàng)目工程代碼深度刨析總結(jié)

    一個(gè)項(xiàng)目工程里的代碼是怎樣的呢?對(duì)于初學(xué)者或者沒有參與過項(xiàng)目的零經(jīng)驗(yàn)同學(xué)這都是未知且讓人好奇的,本篇文章帶你一探究竟,踏入真實(shí)項(xiàng)目的大門
    2022-08-08
  • 深入理解java泛型詳解

    深入理解java泛型詳解

    這篇文章主要介紹了Java中的泛型詳解,什么是泛型,作用以及基礎(chǔ)實(shí)例等,喜歡的朋友可以參考
    2017-04-04
  • springboot如何添加全局異常捕獲類

    springboot如何添加全局異常捕獲類

    這篇文章主要介紹了springboot如何添加全局異常捕獲類,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • SpringCache緩存自定義配置的實(shí)現(xiàn)

    SpringCache緩存自定義配置的實(shí)現(xiàn)

    本文主要介紹了SpringCache緩存自定義配置的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • ES修改字段類型的操作方式

    ES修改字段類型的操作方式

    ES修改字段類型是指在已有的索引中,通過特定的操作方式將某個(gè)字段的類型修改為其它類型,這篇文章主要介紹了ES修改字段類型的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Java Web編程之Servlet技術(shù)詳解

    Java Web編程之Servlet技術(shù)詳解

    這篇文章主要為大家詳細(xì)介紹了Java Web編程之Servlet技術(shù),Servlet就是一種實(shí)現(xiàn)了Servlet接口的類,它由Web容器(Tomcat/Jetty等)負(fù)責(zé)調(diào)用并創(chuàng)建,用于接收和響應(yīng)用戶請(qǐng)求,感興趣的小伙伴們可以參考一下
    2016-05-05
  • MyBatis實(shí)現(xiàn)動(dòng)態(tài)查詢、模糊查詢功能

    MyBatis實(shí)現(xiàn)動(dòng)態(tài)查詢、模糊查詢功能

    這篇文章主要介紹了MyBatis實(shí)現(xiàn)動(dòng)態(tài)查詢、模糊查詢功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Springboot整合ActiveMQ實(shí)現(xiàn)消息隊(duì)列的過程淺析

    Springboot整合ActiveMQ實(shí)現(xiàn)消息隊(duì)列的過程淺析

    昨天仔細(xì)研究了activeMQ消息隊(duì)列,也遇到了些坑,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合ActiveMQ的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • 簡(jiǎn)單了解Thymeleaf語(yǔ)法 數(shù)據(jù)延遲加載使用實(shí)例

    簡(jiǎn)單了解Thymeleaf語(yǔ)法 數(shù)據(jù)延遲加載使用實(shí)例

    這篇文章主要介紹了簡(jiǎn)單了解Thymeleaf語(yǔ)法 數(shù)據(jù)延遲加載使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2010-05-05

最新評(píng)論