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

Java中JSON字符串反序列化(動態(tài)泛型)

 更新時間:2024年12月30日 08:56:56   作者:廢物大師兄  
文章討論了在定時任務(wù)中使用反射調(diào)用目標(biāo)對象時處理動態(tài)參數(shù)的問題,通過將方法參數(shù)存儲為JSON字符串并進(jìn)行反序列化,可以實(shí)現(xiàn)動態(tài)調(diào)用,然而,這種方式容易導(dǎo)致內(nèi)存溢出(OOM),這篇文章主要介紹了JSON字符串反序列化?動態(tài)泛型,需要的朋友可以參考下

需求:定時任務(wù)掃描,反射調(diào)用目標(biāo)對象,但是,方法的傳參不是固定的。

方案一:將方法參數(shù)存成JSON字符串,然后JSON反序列化成對象,然后反射調(diào)用

目標(biāo)方法時這樣的:

CommandResp sendXXX(BaseCommandApiDTO<XXX> baseCommandApiDTO);

方式一:FastJson

Class mainBody = Class.forName(entity.getMainBodyType());
ParameterizedTypeImpl parameterizedType = new ParameterizedTypeImpl(new Type[]{mainBody}, null, BaseCommandApiDTO.class);
Object obj = JSON.parseObject(entity.getMsgText(), parameterizedType);
CommandResp resp = ReflectUtil.invoke(serviceObj, methodName, obj);

方式二:Jackson

public class ObjectMapperHolder {
    private static final ObjectMapper objectMapper = new ObjectMapper();
    public static ObjectMapper getObjectMapper() {
        objectMapper.registerModule(new Jdk8Module());
        objectMapper.registerModule(new JavaTimeModule());
        return objectMapper;
    }
}
ObjectMapper mapper = ObjectMapperHolder.getObjectMapper();
JavaType javaType = mapper.getTypeFactory().constructParametricType(BaseCommandApiDTO.class, mainBody);
Object obj = mapper.readValue(entity.getMsgText(), javaType);
CommandResp resp = ReflectUtil.invoke(serviceObj, methodName, obj);

實(shí)踐中發(fā)現(xiàn),這兩種方式容易導(dǎo)致OOM

方案二:直接將參數(shù)對象存到數(shù)據(jù)庫中

數(shù)據(jù)庫對應(yīng)字段設(shè)置BLOB類型(這里設(shè)置的是MEDIUMBLOB) ,對應(yīng)的java字段類型是byte[]

//  寫入對象
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(baseCommandApiDTO);
oos.flush();
byte[] data = bos.toByteArray();
//  讀取對象
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(entity.getMsgObj()));
Object obj = ois.readObject();

最后的最后,優(yōu)化建議:

1、盡量不要在數(shù)據(jù)庫中存json字符串,如果非要存,建議字段類型設(shè)置為json,這樣可以節(jié)省空間。因?yàn)槟銦o法控制json字符串的長度,所以長度設(shè)置是個問題,另外json反序列化比較占內(nèi)存。

2、長度很大的字段(比如blob類型的)建議單獨(dú)存一張關(guān)聯(lián)表

到此這篇關(guān)于JSON字符串反序列化 動態(tài)泛型的文章就介紹到這了,更多相關(guān)JSON字符串反序列化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java開發(fā)Activiti進(jìn)階篇流程實(shí)例詳解

    java開發(fā)Activiti進(jìn)階篇流程實(shí)例詳解

    這篇文章主要為大家介紹了java開發(fā)Activiti進(jìn)階篇流程實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • RocketMQ根據(jù)Tag進(jìn)行消息過濾

    RocketMQ根據(jù)Tag進(jìn)行消息過濾

    消費(fèi)者訂閱了某個主題后,Apache RocketMQ 會將該主題中的所有消息投遞給消費(fèi)者。若消費(fèi)者只需要關(guān)注部分消息,可通過設(shè)置過濾條件在 Apache RocketMQ 服務(wù)端進(jìn)行過濾,只獲取到需要關(guān)注的消息子集,避免接收到大量無效的消息
    2023-02-02
  • 深入講解基于JDK的動態(tài)代理機(jī)制

    深入講解基于JDK的動態(tài)代理機(jī)制

    眾所周知相比于靜態(tài)代理,動態(tài)代理避免了開發(fā)人員編寫各個繁鎖的靜態(tài)代理類,下面這篇文章主要給大家介紹了關(guān)于基于JDK的動態(tài)代理機(jī)制的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-07-07
  • EJB基礎(chǔ)知識(入門必看)

    EJB基礎(chǔ)知識(入門必看)

    下面小編就為大家?guī)硪黄狤JB基礎(chǔ)知識(入門必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • java中實(shí)現(xiàn)自定義注解方式

    java中實(shí)現(xiàn)自定義注解方式

    注解是Java中的一種元數(shù)據(jù),可以修飾方法、類、參數(shù)和包等,自定義注解需要public修飾符、@interface關(guān)鍵字,以及注解名稱和類型元素,元注解如@Target、@Retention等用于修飾注解,指定注解的適用范圍和生命周期,自定義注解的使用涉及到通過反射解析注解
    2024-11-11
  • Java線程池框架核心代碼解析

    Java線程池框架核心代碼解析

    這篇文章主要針對Java線程池框架核心代碼進(jìn)行詳細(xì)解析,分析Java線程池框架的實(shí)現(xiàn)ThreadPoolExecutor,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 詳解Java動態(tài)代理的實(shí)現(xiàn)機(jī)制

    詳解Java動態(tài)代理的實(shí)現(xiàn)機(jī)制

    這篇文章主要為大家詳細(xì)介紹了Java動態(tài)代理的實(shí)現(xiàn)機(jī)制,感興趣的小伙伴們可以參考一下
    2016-03-03
  • JDK的下載、安裝與部署圖文教程

    JDK的下載、安裝與部署圖文教程

    這篇文章主要為大家詳細(xì)介紹了JDK的下載、安裝與部署圖文教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • springboot+thymeleaf+layui的實(shí)現(xiàn)示例

    springboot+thymeleaf+layui的實(shí)現(xiàn)示例

    本文主要介紹了springboot+thymeleaf+layui的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • SpringBoot整合WebSocket實(shí)現(xiàn)聊天室流程全解

    SpringBoot整合WebSocket實(shí)現(xiàn)聊天室流程全解

    WebSocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議。本文將通過SpringBoot集成WebSocket實(shí)現(xiàn)簡易聊天室,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,感興趣的可以了解一下
    2023-01-01

最新評論

三亚市| 平山县| 玉山县| 宁德市| 江口县| 阿坝县| 民权县| 循化| 塔城市| 吐鲁番市| 郴州市| 墨脱县| 甘泉县| 图木舒克市| 黑龙江省| 金湖县| 革吉县| 丰宁| 云梦县| 喜德县| 龙口市| 沙湾县| 鄢陵县| 云霄县| 阿克苏市| 桂平市| 武川县| 开阳县| 内丘县| 商水县| 顺义区| 博爱县| 通州区| 桦川县| 胶州市| 双流县| 商南县| 休宁县| 安多县| 张家川| 新巴尔虎右旗|