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

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

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

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

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

接著我們嘗試驗證兩種場景
1、Model對象轉(zhuǎn)Json字符串
2、Json字符串轉(zhuǎn)Model對象
在驗證之前我們需要先編寫一個model類,這個model類的字段我們可以使用fastJson中的注解@JSONField來修飾,并添加name值。
這個注解的作用,將該model類的字段和對應(yīng)的json對象的key相對應(yīng)起來。(防盜連接:本文首發(fā)自 )
當然你也可以不添加該注解,這樣就相當于使用了字段名稱本身與json對象的key建立映射。
為了盡可能的展示各種場景,我在下邊的model 示例中,使用了好幾種場景
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;
    }
}

接下來我們開始驗證:
場景一、Model對象轉(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)先級最高,如果未設(shè)置該注解的話,則按照model類中字段的名稱進行設(shè)置。而基本類型、復(fù)雜類型、復(fù)雜類型容器等場景均支持。
場景二、Model對象轉(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串我們使用場景1的輸出,但是稍作修改:刪掉adminUser,同時注意userBeanList容器中的元素,兩個id的key不一樣,一個叫做userId(類字段名),一個叫做user-id(JSONField的name值)。然后再將對象轉(zhuǎn)為Json串,用這兩個Json串進行比較:

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

另外我們補充一個特殊情況情況,Model對象的字段為null轉(zhuǎn)Json串時,如何保留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串會保留null字段

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

相關(guān)文章

  • Mybatis Generator 獲取不到字段注釋的解決

    Mybatis Generator 獲取不到字段注釋的解決

    這篇文章主要介紹了Mybatis Generator 獲取不到字段注釋的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • spring?boot+vue實現(xiàn)JSAPI微信支付的完整步驟

    spring?boot+vue實現(xiàn)JSAPI微信支付的完整步驟

    JSAPI支付是用戶在微信中打開商戶的H5頁面,商戶在H5頁面通過調(diào)用微信支付提供的JSAPI接口調(diào)起微信支付模塊完成支付,下面這篇文章主要給大家介紹了關(guān)于spring?boot+vue實現(xiàn)JSAPI微信支付的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • JAVA熔斷和降級真實關(guān)系的圖文詳解

    JAVA熔斷和降級真實關(guān)系的圖文詳解

    這篇文章主要介紹了Java熔斷和降級的關(guān)系,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • JVM---jstack分析Java線程CPU占用,線程死鎖的解決

    JVM---jstack分析Java線程CPU占用,線程死鎖的解決

    這篇文章主要介紹了JVM---jstack分析Java線程CPU占用,線程死鎖的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java的Cglib動態(tài)代理實現(xiàn)方式詳解

    Java的Cglib動態(tài)代理實現(xiàn)方式詳解

    這篇文章主要介紹了Java的Cglib動態(tài)代理實現(xiàn)方式詳解,CGLIB是強大的、高性能的代碼生成庫,被廣泛應(yīng)用于AOP框架,它底層使用ASM來操作字節(jié)碼生成新的類,為對象引入間接級別,以控制對象的訪問,需要的朋友可以參考下
    2023-11-11
  • SpringBoot使用DevTools實現(xiàn)后端熱部署的過程詳解

    SpringBoot使用DevTools實現(xiàn)后端熱部署的過程詳解

    在Spring Boot項目中,Spring Boot官方提供你了Devtools熱部署模塊,通過maven的方式導(dǎo)入就能使用,本文主要SpringBoot通過DevTools實現(xiàn)熱部署,感興趣的朋友一起看看吧
    2023-11-11
  • 快速掌握SpringBoot應(yīng)用的啟動入口

    快速掌握SpringBoot應(yīng)用的啟動入口

    本篇并不是深究內(nèi)置服務(wù)器的啟動過程,而是追溯Springboot啟動之前到底做了什么?它是如何與我們經(jīng)常寫的@SpringBootApplication注解注釋的main方法類綁定起來的?對SpringBoot啟動入口相關(guān)知識感興趣的朋友一起看看吧
    2022-05-05
  • Java實現(xiàn)貪吃蛇游戲

    Java實現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細介紹了Java實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 如何解決SpringBoot2.x版本對Velocity模板不支持的方案

    如何解決SpringBoot2.x版本對Velocity模板不支持的方案

    這篇文章主要介紹了如何解決SpringBoot2.x版本對Velocity模板不支持的方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 代碼生成器MyBatisX:自動生成代碼方式

    代碼生成器MyBatisX:自動生成代碼方式

    MyBatisX是一款提高開發(fā)效率的插件,可以自動生成Mapper、XML和Java實體類代碼,并支持數(shù)據(jù)庫表的重置和JAP提示,安裝步驟簡單,只需在IDEA的Plugin市場搜索并安裝MyBatisX,然后打開數(shù)據(jù)庫窗口選擇表進行生成即可
    2024-11-11

最新評論

滁州市| 泗阳县| 囊谦县| 台江县| 山东| 莎车县| 依兰县| 太原市| 太原市| 深水埗区| 沙洋县| 于都县| 依兰县| 孟津县| 天祝| 茌平县| 扶余县| 新津县| 临夏县| 深州市| 兰西县| 长沙市| 太白县| 板桥市| 洛浦县| 元氏县| 伊吾县| 雷州市| 即墨市| 曲阜市| 正阳县| 临江市| 宁晋县| 北辰区| 蓝山县| 栾川县| 乐东| 资中县| 呼和浩特市| 抚顺县| 余干县|