我有這樣一個方法:

意思是通過key獲取value,并將他轉為對應的型別,現在我redis中有一個資料,格式為:

現在問題來了,我要將他轉為我的一個型別,名為AdminDetails。該類定義如下:


運行代碼時,出現一些問題,看圖:

我使用Object接受物件,因為我那一串JSON格式原因,他自動把我型別轉為了LinkedHashMap,最終導致我轉換失敗, 但我實際傳入的型別為AdminDetails
這種型別格式,該如何去正確的轉換,求大佬解惑!!!!!!!!
但除此之外,get方法還會操作很多其他型別,比如String,Map等
對了,我的設定快取代碼如下:
uj5u.com熱心網友回復:
用json工具類import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
uj5u.com熱心網友回復:
jsonObject并不能決議,他自動轉換成了LinkedHashMap,但我要指定的是AdminDetails,不能成功決議uj5u.com熱心網友回復:
redis取值就是一個反序列化的程序,在整個程序中他是不知道你存進去是一個bean型別的,存到redis的時候就是一個序列化程序,我看你用到了objectmapper,所以最簡單的你直接用string去接受你要獲取的value,然后objectmapper.readValue(str,AdminDetail.class)去取,他就會自動幫你反序列化成你要的admindetail物件了uj5u.com熱心網友回復:
我的做法是直接將結果強轉為T,然后呼叫get方法那里直接用AdminDetails接受,但在接受至少需要使用JSON.toJSONString轉為String,再使用JSON.parseObject轉為AdminDetails,這樣子還是很疑惑,我明明存的就是AdminDetails這個物件的json資料,為什么不能拿出來直接賦值使用。例如:AdminDetails aaa = redisTemplate.get(xxx)這樣子。uj5u.com熱心網友回復:
手機寫的,有點錯別字:在接收之前需要使用...
uj5u.com熱心網友回復:
好的,明天我去試試
uj5u.com熱心網友回復:
看官網檔案啊,JSon讀出來的就是一個Map,需要用HashMapper轉換的。
public class Person {
String firstname;
String lastname;
// …
}
public class HashMapping {
@Autowired
HashOperations<String, byte[], byte[]> hashOperations;
HashMapper<Object, byte[], byte[]> mapper = new ObjectHashMapper();
public void writeHash(String key, Person person) {
Map<byte[], byte[]> mappedHash = mapper.toHash(person);
hashOperations.putAll(key, mappedHash);
}
public Person loadHash(String key) {
Map<byte[], byte[]> loadedHash = hashOperations.entries("key");
return (Person) mapper.fromHash(loadedHash);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232146.html
標籤:Java EE
