refactor: 重构 sa-token-fastjson 插件

This commit is contained in:
click33
2025-02-26 06:09:55 +08:00
parent ca787ec240
commit 03ad51ef7b
18 changed files with 147 additions and 91 deletions

View File

@@ -120,11 +120,8 @@ public interface SaGetValueInterface {
*/
@SuppressWarnings("unchecked")
default <T> T getModel(String key, Class<T> cs, Object defaultValue) {
Object value = get(key);
if(valueIsNull(value)) {
return (T)defaultValue;
}
return SaFoxUtil.getValueByType(value, cs);
T model = getModel(key, cs);
return valueIsNull(model) ? (T)defaultValue : model;
}
/**

View File

@@ -96,6 +96,14 @@ public interface SaTokenDao {
*/
Object getObject(String key);
/**
* 获取 Object (指定反序列化类型),如无返空
*
* @param key 键名称
* @return object
*/
<T> T getObject(String key, Class<T> classType);
/**
* 写入 Object并设定存活时间 (单位: 秒)
*

View File

@@ -39,6 +39,12 @@ public class SaTokenDaoDefaultImpl implements SaTokenDaoByStringFollowObject {
return timedCache.getObject(key);
}
@Override
@SuppressWarnings("unchecked")
public <T> T getObject(String key, Class<T> classType){
return (T) getObject(key);
}
@Override
public void setObject(String key, Object object, long timeout) {
timedCache.setObject(key, object, timeout);

View File

@@ -39,6 +39,17 @@ public interface SaTokenDaoByObjectFollowString extends SaTokenDaoBySessionFollo
return SaManager.getSaSerializerTemplate().stringToObject(jsonString);
}
/**
* 获取 Object (指定反序列化类型),如无返空
*
* @param key 键名称
* @return object
*/
default <T> T getObject(String key, Class<T> classType) {
String jsonString = get(key);
return SaManager.getSaSerializerTemplate().stringToObject(jsonString, classType);
}
/**
* 写入 Object并设定存活时间 (单位: 秒)
*

View File

@@ -17,6 +17,7 @@ package cn.dev33.satoken.dao.auto;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.strategy.SaStrategy;
/**
* SaTokenDao 次级实现SaSession 读写跟随 Object 读写
@@ -34,7 +35,7 @@ public interface SaTokenDaoBySessionFollowObject extends SaTokenDao {
* @return SaSession
*/
default SaSession getSession(String sessionId) {
return (SaSession)getObject(sessionId);
return getObject(sessionId, SaStrategy.instance.sessionClassType);
}
/**

View File

@@ -37,9 +37,21 @@ public interface SaJsonTemplate {
* 反序列化json 字符串 → 对象
*
* @param jsonStr /
* @param type /
* @return /
* @param <T> /
*/
<T>T jsonToObject(String jsonStr, Class<T> type);
/**
* 反序列化json 字符串 → 对象 (自动判断类型)
*
* @param jsonStr /
* @return /
*/
Object jsonToObject(String jsonStr);
default Object jsonToObject(String jsonStr) {
return jsonToObject(jsonStr, Object.class);
};
/**
* 反序列化json 字符串 → Map
@@ -47,6 +59,8 @@ public interface SaJsonTemplate {
* @param jsonStr /
* @return /
*/
Map<String, Object> jsonToMap(String jsonStr);
default Map<String, Object> jsonToMap(String jsonStr) {
return jsonToObject(jsonStr, Map.class);
};
}

View File

@@ -42,6 +42,11 @@ public class SaJsonTemplateDefaultImpl implements SaJsonTemplate {
throw new NotImplException(ERROR_MESSAGE).setCode(SaErrorCode.CODE_10003);
}
@Override
public <T> T jsonToObject(String jsonStr, Class<T> type) {
throw new NotImplException(ERROR_MESSAGE).setCode(SaErrorCode.CODE_10003);
}
@Override
public Map<String, Object> jsonToMap(String jsonStr) {
throw new NotImplException(ERROR_MESSAGE).setCode(SaErrorCode.CODE_10003);

View File

@@ -39,6 +39,21 @@ public interface SaSerializerTemplate {
*/
Object stringToObject(String str);
/**
* 反序列化:字符串 → 对象 (指定类型)
* <p>
* 此方法目前仅为 json 序列化实现类 在 反序列化对象 传递类型信息
* </p>
*
* @param str /
* @return /
*/
@SuppressWarnings("unchecked")
default <T> T stringToObject(String str, Class<T> type) {
return (T)stringToObject(str);
};
/**
* 序列化:对象 -> 字节数组
*

View File

@@ -37,6 +37,11 @@ public class SaSerializerTemplateForJson implements SaSerializerTemplate {
return SaManager.getSaJsonTemplate().jsonToObject(str);
}
@Override
public <T>T stringToObject(String str, Class<T> type) {
return SaManager.getSaJsonTemplate().jsonToObject(str, type);
}
@Override
public byte[] objectToBytes(Object obj) {
throw new ApiDisabledException("json 序列化器不支持 Object -> byte[]");

View File

@@ -101,6 +101,11 @@ public final class SaStrategy {
return new SaSession(sessionId);
};
/**
* 反序列化 SaSession 时默认指定的类型
*/
public volatile Class<? extends SaSession> sessionClassType = SaSession.class;
/**
* 判断:集合中是否包含指定元素(模糊匹配)
*/

View File

@@ -20,6 +20,7 @@ import cn.dev33.satoken.exception.SaTokenException;
import java.io.Console;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
@@ -376,6 +377,36 @@ public class SaFoxUtil {
return (T)obj3;
}
/**
* 将 Map 转化为 Object
* @param map /
* @param clazz /
* @return /
* @param <T> /
*/
public static <T> T mapToObject(Map<String, Object> map, Class<T> clazz) {
if(map == null) {
return null;
}
if(clazz == Map.class) {
return (T) map;
}
try {
T obj = clazz.getDeclaredConstructor().newInstance();
for (Field field : clazz.getDeclaredFields()) {
String fieldName = field.getName();
if (map.containsKey(fieldName)) {
field.setAccessible(true);
field.set(obj, map.get(fieldName));
}
}
return obj;
} catch (Exception e) {
throw new RuntimeException("转换失败: " + e.getMessage(), e);
}
}
/**
* 在url上拼接上kv参数并返回
* @param url url