fastJson泛型如何轉(zhuǎn)換的實(shí)現(xiàn)
引子
現(xiàn)在負(fù)責(zé)的業(yè)務(wù) 和 json 打交道比較多, 最近使用fastJson框架 json串轉(zhuǎn)成泛型對(duì)象遇到了一個(gè)異常 :java.lang.ClassCastException
還原下場(chǎng)景 :
模型Result<T>
public class Result<T> {
private String msg;
private List<T> module;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public List<T> getModule() {
return module;
}
public void setModule(List<T> module) {
this.module = module;
}
}
為什么要使用泛型, 可以理解泛型可以接受任意類型, 有些代碼是公用的, 如結(jié)果集, 不可能為每個(gè)具體結(jié)果定義一個(gè)模型, 比如 Result<User>、Result<Item>等。
public class User {
private Long user_id;
private String user_name;
public User() {
}
public User(Long userId, String name) {
this.user_id = userId;
this.user_name = name;
}
public Long getUser_id() {
return user_id;
}
public void setUser_id(Long user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
}
下面直接看下泛型的轉(zhuǎn)換
public static void main(String[] args) {
Result<User> r = new Result<User>();
r.setMsg("msg");
List<User> users = new ArrayList<>();
users.add(new User(1L, "hehe"));
users.add(new User(2L, "haha"));
r.setModule(users);
String js = JSON.toJSONString(r);
System.out.println(js);
Result<User> obj = (Result<User>)JSON.parseObject(js, Result.class);
User user = obj.getModule().get(0);
System.out.println(user);
}
結(jié)果 :
{"module":[{"user_id":1,"user_name":"hehe"},{"user_id":2,"user_name":"haha"}],"msg":"msg"}
Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.yuanmeng.json.User
at com.yuanmeng.json.fanxing.Client.main(Client.java:32)
采用fastjson框架的 TypeReference 即可將json串轉(zhuǎn)成定義好的泛型對(duì)象
Result<User> obj = (Result<User>) JSON.parseObject(js, new TypeReference<Result<User>>(){});
到此這篇關(guān)于fastJson泛型如何轉(zhuǎn)換的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)fastJson泛型轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?Kryo,Protostuff,Hessian序列化方式對(duì)比
這篇文章主要介紹了Java?Kryo,Protostuff,Hessian序列化方式對(duì)比,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07
將應(yīng)用程序進(jìn)行Spring6遷移的最佳使用方式
這篇文章主要介紹了將應(yīng)用程序進(jìn)行Spring6遷移的最佳方式,以及如何充分利用此升級(jí),需要的朋友可以參考下,如有錯(cuò)誤的地方還請(qǐng)指正2023-03-03
Spring入門配置和DL依賴注入實(shí)現(xiàn)圖解
這篇文章主要介紹了Spring入門配置和DL依賴注入實(shí)現(xiàn)圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Mybatis #foreach中相同的變量名導(dǎo)致值覆蓋的問題解決
本文主要介紹了Mybatis #foreach中相同的變量名導(dǎo)致值覆蓋的問題解決,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
MyBatis不同Mapper文件引用resultMap實(shí)例代碼
這篇文章主要介紹了mybatis 不同Mapper文件引用resultMap的實(shí)例代碼,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2017-07-07
springboot 注冊(cè)服務(wù)注冊(cè)中心(zk)的兩種方式詳解
本文通過一個(gè)demo講述一下這兩種注冊(cè)方式,使用的是傳統(tǒng)的向zk注冊(cè)的方案。對(duì)springboot 注冊(cè)zk的相關(guān)知識(shí)感興趣的朋友一起看看吧2018-01-01
SpringBoot實(shí)現(xiàn)PDF轉(zhuǎn)圖片的代碼示例
在本文中,我們使用SpringBoot演示了如何將PDF文件轉(zhuǎn)換為一張或多張圖片,這些示例演示了如何使用Java編程語(yǔ)言與其他開源技術(shù)集成,以實(shí)現(xiàn)各種文件格式之間的轉(zhuǎn)換,感興趣的小伙伴跟著小編一起來看看吧2024-08-08
Java通過調(diào)用C/C++實(shí)現(xiàn)的DLL動(dòng)態(tài)庫(kù)——JNI的方法
這篇文章主要介紹了Java通過調(diào)用C/C++實(shí)現(xiàn)的DLL動(dòng)態(tài)庫(kù)——JNI的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-01-01

