溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么將Object類轉換為實體類

發(fā)布時間:2022-08-26 14:55:07 來源:億速云 閱讀:437 作者:iii 欄目:開發(fā)技術

今天小編給大家分享一下怎么將Object類轉換為實體類的相關知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    將Object類轉換為實體類

    問題描述

    在用SpringBoot寫controller的時候,需要接受一個map的Object,之后要把Object轉為特定的類,代碼如下:

    public boolean postArticle(@RequestBody Map<String, Object> map) {
            ArticleInfo articleInfo = (ArticleInfo) map.get("articleInfo");
            ArticleContent articleContent = (ArticleContent) map.get("articleContent");
            System.out.println(articleInfo + " " + articleContent);
            return true;
    }

    之后爆出異常:

    java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class 
    cn.zi10ng.blog.domain.ArticleInfo (java.util.LinkedHashMap is in module java.base of loader
     'bootstrap'; cn.zi10ng.blog.domain.ArticleInfo is in unnamed module of loader 
     org.springframework.boot.devtools.restart.classloader.RestartClassLoader @19b54dc3)

    問題原因

    map中取出的是Object,不能直接把Object轉為特定的實體類

    解決辦法

    需要通過json來作為中間介質(zhì):

       public boolean postArticle(@RequestBody Map<String, Object> map) throws IOException {
    
            ObjectMapper objectMapper = new ObjectMapper();
            String jsonInfo = objectMapper.writeValueAsString(map.get("articleInfo"));
            String jsonContent = objectMapper.writeValueAsString(map.get("articleContent"));
            ArticleInfo articleInfo = objectMapper.readValue(jsonInfo,ArticleInfo.class);
            ArticleContent articleContent = objectMapper.readValue(jsonContent,ArticleContent.class);
    
            System.out.println(articleContent + " " +articleInfo);
            return articleService.insertArticle(articleInfo,articleContent);
        }

    實體類之間的相互轉換

    public static <A, B> B beanA2beanB(A beanA, Class<B> bClass, String... ignoreProperties) {
            try {
                B b = bClass.newInstance();
                cn.hutool.core.bean.BeanUtil.copyProperties(
                        beanA,
                        b,
                        CopyOptions.create().setIgnoreProperties(ignoreProperties).ignoreError().ignoreNullValue()
                );
                return b;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return (B) new Object();
        }
    
        /**
         * 可實現(xiàn)由 BeanA List 轉換為 BeanB List<br>
         * tip1: 轉換的規(guī)則是 實體內(nèi)屬性一致的進行轉換<br>
         * tip2: 轉換會忽略 Null 和錯誤
         *
         * @param listA            A 實體
         * @param bClass           B 類
         * @param ignoreProperties 要忽略轉換的字段 數(shù)組類型<br>
         *                         由該屬性可解決同一個Vo 在不同需求中要返回的實體不一致問題 列入UserListVO 在后臺和前臺使用的列表是同一個,但是返回的字段不一致
         * @param <A> 泛型A
         * @param <B> 泛型
         * @return 轉換后的BList實體
         */
        public static <A, B> List<B> listA2ListB(Collection<A> listA, Class<B> bClass, String... ignoreProperties) {
            List<B> listB = new ArrayList<>();
            if (ObjectUtils.isEmpty(listA)) {
                return listB;
            }
            try {
                for (A a : listA) {
                    listB.add(beanA2beanB(a, bClass, ignoreProperties));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return listB;
        }

    以上就是“怎么將Object類轉換為實體類”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業(yè)資訊頻道。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

    AI