diff --git a/sa-token-demo/sa-token-demo-test/pom.xml b/sa-token-demo/sa-token-demo-test/pom.xml index 14ece5b9..f310d333 100644 --- a/sa-token-demo/sa-token-demo-test/pom.xml +++ b/sa-token-demo/sa-token-demo-test/pom.xml @@ -62,7 +62,7 @@ cn.dev33 - sa-token-fastjson + sa-token-fastjson2 ${sa-token.version} diff --git a/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForFastjson2.java b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForFastjson2.java index 97585766..64efa883 100644 --- a/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForFastjson2.java +++ b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForFastjson2.java @@ -16,13 +16,10 @@ package cn.dev33.satoken.json; -import cn.dev33.satoken.session.SaSessionForFastjson2Customized; import com.alibaba.fastjson2.JSON; -import java.util.Map; - /** - * JSON 转换器, Fastjson 版实现 + * JSON 转换器, Fastjson2 版实现 * * @author click33 * @since 1.34.0 @@ -41,17 +38,8 @@ public class SaJsonTemplateForFastjson2 implements SaJsonTemplate { * 反序列化:json 字符串 → 对象 */ @Override - public Object jsonToObject(String jsonStr) { - // TODO: 此处待更改,需要让其自动识别类型 - return JSON.parseObject(jsonStr, SaSessionForFastjson2Customized.class); - } - - /** - * 反序列化:json 字符串 → Map - */ - @Override - public Map jsonToMap(String jsonStr) { - return JSON.parseObject(jsonStr, Map.class); + public T jsonToObject(String jsonStr, Class type) { + return JSON.parseObject(jsonStr, type); } } diff --git a/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForFastjson2.java b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForFastjson2.java index f28ff687..fea05d97 100644 --- a/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForFastjson2.java +++ b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForFastjson2.java @@ -37,6 +37,8 @@ public class SaTokenPluginForFastjson2 implements SaTokenPlugin { // 重写 SaSession 生成策略 SaStrategy.instance.createSession = SaSessionForFastjson2Customized::new; + // 指定 SaSession 类型 + SaStrategy.instance.sessionClassType = SaSessionForFastjson2Customized.class; } diff --git a/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/session/SaSessionForFastjson2Customized.java b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/session/SaSessionForFastjson2Customized.java index 5a0d17fa..345b5537 100644 --- a/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/session/SaSessionForFastjson2Customized.java +++ b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/session/SaSessionForFastjson2Customized.java @@ -17,9 +17,10 @@ package cn.dev33.satoken.session; import cn.dev33.satoken.util.SaFoxUtil; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; /** - * Fastjson2 定制版 SaSession,重写类型转换API、忽略 timeout 字段的序列化 + * Fastjson2 定制版 SaSession,重写类型转换API * * @author click33 * @since 1.34.0 @@ -48,35 +49,25 @@ public class SaSessionForFastjson2Customized extends SaSession { * @param 泛型 * @param key key * @param cs 指定转换类型 - * @return 值 + * @return 值 */ @Override public T getModel(String key, Class cs) { - if(SaFoxUtil.isBasicType(cs)) { - return SaFoxUtil.getValueByType(get(key), cs); - } - return JSON.parseObject(getString(key), cs); - } - - /** - * 取值 (指定转换类型, 并指定值为Null时返回的默认值) - * @param 泛型 - * @param key key - * @param cs 指定转换类型 - * @param defaultValue 值为Null时返回的默认值 - * @return 值 - */ - @Override - @SuppressWarnings("unchecked") - public T getModel(String key, Class cs, Object defaultValue) { + // 如果是想取出为基础类型 Object value = get(key); - if(valueIsNull(value)) { - return (T)defaultValue; - } if(SaFoxUtil.isBasicType(cs)) { - return SaFoxUtil.getValueByType(get(key), cs); + return SaFoxUtil.getValueByType(value, cs); + } + // 为空提前返回 + if(valueIsNull(value)) { + return null; + } + // 如果是 JSONObject 类型直接转,否则先转为 String 再转 + if(value instanceof JSONObject) { + JSONObject jo = (JSONObject) value; + return jo.to(cs); + } else { + return JSON.parseObject(value.toString(), cs); } - return JSON.parseObject(getString(key), cs); } - }