dromara/Sa-Token

SaSessionForFastjsonCustomized类中的getModel与预期不符

DemoCap opened this issue · 1 comments

使用版本:

1.38.0

涉及的功能模块:

SaSessionForFastjsonCustomized类中的“getModel”方法
当我使用一下方法时,getModel会出错
SaSessionCustomUtil.getSessionById("TEST_KEY").set("01",new JavaBean("value"));
SaSessionCustomUtil.getSessionById("TEST_KEY").getModel("01"JavaBean.class);

该方法将会通过getString方法获取数据并通过JSON.parseObject进行转换

@Override
public <T> T getModel(String key, Class<T> cs) {
if(SaFoxUtil.isBasicType(cs)) {
	return SaFoxUtil.getValueByType(get(key), cs);
}
//可能存在的异常:反序列化失败
return JSON.parseObject(getString(key), cs);

而getString将会调用get方法,get中的dataMap是Map<String,Object>;
所以通过getString获取到的string不一定是json字符串,而导致JSON.parseObject出错

@Override
public Object get(String key) {
	return dataMap.get(key);
}
@Override
public SaSession set(String key, Object value) {
	dataMap.put(key, value);
	update();
	return this;
}

如果修改为以下片段就可以了

public <T> T getModel(String key, Class<T> cs) {
Object value = get(key);
if(valueIsNull(value)) {
	return (T)value;
}
if(cs.isAssignableFrom(value.getClass())){
	return (T) value;
}
if(SaFoxUtil.isBasicType(cs)) {
	return SaFoxUtil.getValueByType(value, cs);
}
return JSON.parseObject(String.valueOf(value), cs);
}

如果上述问题存在且被采纳,还希望能更新到下一版本
(我不太会使用git)