nbcio-boot從3.0升級到3.1的出現用戶管理與數據字典bug

升級后出現

系統管理里的用戶管理出現下面問題

2023-08-17 09:44:38.902 [http-nio-8080-exec-4] [1;31mERROR[0;39m [36mo.jeecg.common.exception.JeecgBootExceptionHandler:69[0;39m - java.lang.String cannot be cast to java.lang.Long
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
?? ?at org.jeecg.common.aspect.DictAspect.parseDictText(DictAspect.java:139)
?? ?at org.jeecg.common.aspect.DictAspect.doAround(DictAspect.java:62)
?? ?at sun.reflect.GeneratedMethodAccessor150.invoke(Unknown Source)
?? ?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
?? ?at java.lang.reflect.Method.invoke(Method.java:498)
?? ?at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)
?? ?at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)
?? ?at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)
?? ?at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
?? ?at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
?? ?at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
?? ?at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
?? ?at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
?? ?at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
?? ?at org.jeecg.modules.system.controller.SysUserController$$EnhancerBySpringCGLIB$$604f6775.queryPageList(<generated>)

數據字典出現下面問題

2023-08-17 09:50:23.491 [http-nio-8080-exec-2] [1;31mERROR[0;39m [36mo.jeecg.common.exception.JeecgBootExceptionHandler:69[0;39m - java.lang.String cannot be cast to java.lang.Long
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
?? ?at org.jeecg.common.aspect.DictAspect.parseDictText(DictAspect.java:139)
?? ?at org.jeecg.common.aspect.DictAspect.doAround(DictAspect.java:62)
?? ?at sun.reflect.GeneratedMethodAccessor150.invoke(Unknown Source)
?? ?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
?? ?at java.lang.reflect.Method.invoke(Method.java:498)
?? ?at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)
?? ?at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)
?? ?at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)
?? ?at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
?? ?at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
?? ?at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
?? ?at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
?? ?at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
?? ?at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
?? ?at org.jeecg.modules.system.controller.SysDictItemController$$EnhancerBySpringCGLIB$$824a46d6.queryPageList(<generated>)
?? ?at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
?? ?at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
?? ?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
?? ?at java.lang.reflect.Method.invoke(Method.java:498)

上面兩個問題主要都是DictAspect.parseDictText出現問題,具體看就是這個函數里面的一個日期轉換到string出問題,目前不需要了,可以注釋掉了,注釋掉后正常,代碼如下:

private void parseDictText(Object result) {if (result instanceof Result) {if (((Result) result).getResult() instanceof IPage) {List<JSONObject> items = new ArrayList<>();//step.1 篩選出加了 Dict 注解的字段列表List<Field> dictFieldList = new ArrayList<>();// 字典數據列表, key = 字典code,value=數據列表Map<String, List<String>> dataListMap = new HashMap<>();for (Object record : ((IPage) ((Result) result).getResult()).getRecords()) {ObjectMapper mapper = new ObjectMapper();String json="{}";try {//解決@JsonFormat注解解析不了的問題詳見SysAnnouncement類的@JsonFormat//json = mapper.writeValueAsString(record);  //改用objectMapper,解決java8 LocalDateTime JSON解析問題json = objectMapper.writeValueAsString(record);} catch (JsonProcessingException e) {log.error("json解析失敗"+e.getMessage(),e);}JSONObject item = JSONObject.parseObject(json);//update-begin--Author:scott -- Date:20190603 ----for:解決繼承實體字段無法翻譯問題------//for (Field field : record.getClass().getDeclaredFields()) {// 遍歷所有字段,把字典Code取出來,放到 map 里for (Field field : oConvertUtils.getAllFields(record)) {String value = item.getString(field.getName());if (oConvertUtils.isEmpty(value)) {continue;}//update-end--Author:scott  -- Date:20190603 ----for:解決繼承實體字段無法翻譯問題------if (field.getAnnotation(Dict.class) != null) {if (!dictFieldList.contains(field)) {dictFieldList.add(field);}String code = field.getAnnotation(Dict.class).dicCode();String text = field.getAnnotation(Dict.class).dicText();String table = field.getAnnotation(Dict.class).dictTable();List<String> dataList;String dictCode = code;if (!StringUtils.isEmpty(table)) {dictCode = String.format("%s,%s,%s", table, text, code);}dataList = dataListMap.computeIfAbsent(dictCode, k -> new ArrayList<>());this.listAddAllDeduplicate(dataList, Arrays.asList(value.split(",")));}//date類型默認轉換string格式化日期/*if (field.getType().getName().equals("java.util.Date")&&field.getAnnotation(JsonFormat.class)==null&&item.get(field.getName())!=null){SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));}*/}items.add(item);}//step.2 調用翻譯方法,一次性翻譯Map<String, List<DictModel>> translText = this.translateAllDict(dataListMap);//step.3 將翻譯結果填充到返回結果里for (JSONObject record : items) {for (Field field : dictFieldList) {String code = field.getAnnotation(Dict.class).dicCode();String text = field.getAnnotation(Dict.class).dicText();String table = field.getAnnotation(Dict.class).dictTable();String fieldDictCode = code;if (!StringUtils.isEmpty(table)) {fieldDictCode = String.format("%s,%s,%s", table, text, code);}String value = record.getString(field.getName());if (oConvertUtils.isNotEmpty(value)) {List<DictModel> dictModels = translText.get(fieldDictCode);if(dictModels==null || dictModels.size()==0){continue;}String textValue = this.translDictText(dictModels, value);log.debug(" 字典Val : " + textValue);log.debug(" __翻譯字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue);// TODO-sun 測試輸出,待刪log.debug(" ---- dictCode: " + fieldDictCode);log.debug(" ---- value: " + value);log.debug(" ----- text: " + textValue);log.debug(" ---- dictModels: " + JSON.toJSONString(dictModels));record.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);}}}((IPage) ((Result) result).getResult()).setRecords(items);}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41910.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41910.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41910.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【JS 線性代數算法之向量與矩陣】

線性代數算法 一、向量的加減乘除1. 向量加法2. 向量減法3. 向量數乘4. 向量點積5. 向量叉積 二、矩陣的加減乘除1. 矩陣加法2. 矩陣減法3. 矩陣數乘4. 矩陣乘法 常用數學庫 線性代數是數學的一個分支&#xff0c;用于研究線性方程組及其解的性質、向量空間及其變換的性質等。在…

windows bat腳本,使用命令行增加/刪除防火墻:入站-出站,規則

常常手動設置防火墻的入站或出站規則&#xff0c;比較麻煩&#xff0c;其實可以用命令行搞定。 下面是禁用BCompare.exe連接網絡的例子&#xff1a; ECHO OFF&(PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(powershell -Comm…

web即時通訊系統與APP即時通訊系統有什么區別?

隨著互聯網的不斷發展&#xff0c;即時通訊技術也在不斷地完善和發展&#xff0c;其中Web即時通訊系統和APP即時通訊系統成為了人們廣泛使用的兩種通訊方式。那么&#xff0c;這兩者之間究竟有什么區別呢&#xff1f;在本文中&#xff0c;我們將為您詳細介紹這兩種通訊方式的區…

如何將labelImg打包成exe

最近整理一下數據標注這塊的內容&#xff0c;在目標檢測和目標分割里面用的最多的標注工具labelimg&#xff0c;labelme labelimg主要用于目標檢測領域制作自己的數據集&#xff0c;如&#xff1a;YOLO系列目標檢測模型 labelme主要用于圖像分割領域制作自己的數據集&#xf…

如何仿寫簡易tomcat 實現思路+代碼詳細講解

仿寫之前&#xff0c;我們要搞清楚都要用到哪些技術 自定義注解&#xff0c;比如Tomcat使用的是Servlet&#xff0c;我們可以定義一個自己的MyServlet構造請求體和返回體&#xff0c;比如tomcat使用HttpRequest&#xff0c;我們可以自己定義myHttpRequestjava去遍歷一個指定目…

Structs新增接口 報錯404,找不到資源

起因&#xff1a;最近在一個古老框架structs上開發新功能&#xff0c;由于之前沒接觸過&#xff0c;故此記錄 新增接口&#xff0c; 接口類&#xff1a; Path("/A") Produces({ MediaType.APPLICATION_JSON }) public interface Money {POSTPath("/B")Resu…

數據結構——鏈表詳解

鏈表 文章目錄 鏈表前言認識鏈表單鏈表結構圖帶頭單循環鏈表結構圖雙向循環鏈表結構圖帶頭雙向循環鏈表結構圖 鏈表特點 鏈表實現(帶頭雙向循環鏈表實現)鏈表結構體(1) 新建頭節點(2) 建立新節點(3)尾部插入節點(4)刪除節點(5)頭部插入節點(6) 頭刪節點(7) 尋找節點(8) pos位置…

網絡編程socket.close/output.close/socket.shutdownOutput區別與流程分析

文章目錄 三種方法效果的區別套接字Socket關閉與釋放的區別服務器執行三種關閉操作后&#xff0c;繼續發送/接收數據會發生什么socket.shutdownOutput 關閉連接 找了半個小時沒一個說明白的帖子&#xff0c;真的折磨 三種方法效果的區別 socket.close()Socket主動禁止輸入和輸…

APP外包開發原生和H5的區別

原生開發和H5開發是兩種不同的方法&#xff0c;用于創建移動應用程序。它們具有各自的特點、優勢和劣勢&#xff0c;適用于不同的應用場景。以下是原生開發和H5開發之間的一些主要區別&#xff0c;希望對大家有所幫助。北京木奇移動技術有限公司&#xff0c;專業的軟件外包開發…

DELETE 與TRUNCATE區別

DELETE 與TRUNCATE區別 要清空 PostgreSQL 中的表數據&#xff0c;可以使用 DELETE 或 TRUNCATE 語句。下面是兩種方法的示例&#xff1a; 使用 DELETE 語句清空表數據&#xff1a; DELETE FROM 表名;例如&#xff0c;要清空名為 users 的表數據&#xff1a; DELETE FROM u…

未來公文的智能化進程

隨著技術的飛速發展&#xff0c;公文——這個有著悠久歷史的官方溝通方式&#xff0c;也正逐步走向智能化的未來。自動化、人工智能、區塊鏈...這些現代科技正重塑我們的公文制度&#xff0c;讓其變得更加高效、安全和智慧。 1.語義理解與自動生成 通過深度學習和NLP&#xff…

14-案例:購物車

綜合案例-購物車 需求說明: 1. 渲染功能 v-if/v-else v-for :class 2. 刪除功能 點擊傳參 filter過濾覆蓋原數組 3. 修改個數 點擊傳參 find找對象 4. 全選反選 計算屬性computed 完整寫法 get/set 5. 統計 選中的 總價 和 數量 計算屬性conputed reduce條件求和 6. 持久化到本…

電子商務公開密鑰加密法

(一)定義與應用原理 公開密鑰加密法是針對私有密鑰加密法的缺陷而提出來的。是電子商務應 用的核心密碼技術。所謂公開密鑰加密&#xff0c;就是指在計算機網絡上甲、乙兩用戶之間 進行通信時&#xff0c;發送方甲為了保護要傳輸的明文信息不被第三方竊取&#xff0c;采用密…

從零基礎到精通IT:探索高效學習路徑與成功案例

文章目錄 導語&#xff1a;第一步&#xff1a;明確學習目標與方向選擇適合的IT方向設定具體的學習目標咨詢和調研 第二步&#xff1a;系統學習基礎知識選擇適合的編程語言學習數據結構和算法掌握操作系統和計算機網絡基礎 第三步&#xff1a;實踐項目鍛煉技能選擇合適的項目編寫…

聊一下操作系統 macOS 與 Linux

對于Windows操作系統大家都比較熟悉&#xff0c;也常拿它與Linux操作系統進行比較&#xff0c;兩者之間的差異也很明顯。但對于macOS 和 Linux的比較不太多&#xff0c;很多人認為它們很相似&#xff0c;因為這兩種操作系統都可以運行 Unix 命令。其實詳細比較下&#xff0c;兩…

Redis——哨兵模式(docker部署redis哨兵)+緩存穿透和雪崩

哨兵模式 自動選取主機的模式。 概述 主從切換技術的方法是:當主服務器宕機后&#xff0c;需要手動把一臺從服務器切換為主服務器&#xff0c;這就需要人工干預&#xff0c;費事費力&#xff0c;還會造成段時間內服務不可用。這不是一種推薦的方式&#xff0c;更多時候&…

前端開發怎么解決性能優化的問題? - 易智編譯EaseEditing

前端性能優化是確保網站或應用在加載速度、響應性和用戶體驗等方面達到最佳狀態的關鍵任務。以下是一些解決前端性能優化問題的方法&#xff1a; 壓縮和合并代碼&#xff1a; 壓縮和合并CSS、JavaScript和HTML文件可以減少文件大小&#xff0c;加快加載速度。使用壓縮工具&am…

【Linux】Linux下常用查看文件指令小結

0x00 前言 版本信息&#xff1a;Ubuntu 18.04.6 LTS 最后更新日期&#xff1a;2023.8.18 0x01 Linux下常用查看文件指令小結 cat file &#xff1a;顯示文件內容&#xff0c;支持-n選項&#xff0c;即cat -n file&#xff0c;表示加行號顯示文件內容&#xff0c;不過不適合看…

vue vs react

vue 簡介&#xff1a;漸進式 JavaScript 框架 來源&#xff1a;最初由 Evan You &#xff08;尤雨溪&#xff09;于2014年開發。Evan You之前在Google研究過AngularJS&#xff0c;并提取了Angular的部分特性以提供一個更輕量級的框架 版本&#xff1a; vue 1x&#xff1a;2014…

協同過濾推薦算法-基于Django+mysql的智能水果銷售系統設計(可做計算機畢設)

隨著科技的不斷發展&#xff0c;智能化已經成為各行各業的趨勢&#xff0c;水果銷售行業也不例外。智能水果銷售系統就是應運而生的一種智能化解決方案&#xff0c;它可以為用戶提供更加便捷、高效的購物體驗。其中&#xff0c;系統模塊是智能水果銷售系統的重要組成部分。 系…