mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-04-05 17:37:53 +08:00
refactor: 重构 JSON 转换器模块
This commit is contained in:
parent
ede9aba865
commit
e6dd850752
@ -26,18 +26,27 @@ import java.util.Map;
|
||||
public interface SaJsonTemplate {
|
||||
|
||||
/**
|
||||
* 将任意对象序列化为 json 字符串
|
||||
* 序列化:对象 -> json 字符串
|
||||
*
|
||||
* @param obj 对象
|
||||
* @return 转换后的 json 字符串
|
||||
* @param obj /
|
||||
* @return /
|
||||
*/
|
||||
String toJsonString(Object obj);
|
||||
String objectToJson(Object obj);
|
||||
|
||||
/**
|
||||
* 解析 json 字符串为 map 对象
|
||||
* @param jsonStr json 字符串
|
||||
* @return map 对象
|
||||
* 反序列化:json 字符串 → 对象
|
||||
*
|
||||
* @param jsonStr /
|
||||
* @return /
|
||||
*/
|
||||
Map<String, Object> parseJsonToMap(String jsonStr);
|
||||
Object jsonToObject(String jsonStr);
|
||||
|
||||
/**
|
||||
* 反序列化:json 字符串 → Map
|
||||
*
|
||||
* @param jsonStr /
|
||||
* @return /
|
||||
*/
|
||||
Map<String, Object> jsonToMap(String jsonStr);
|
||||
|
||||
}
|
||||
|
@ -15,11 +15,11 @@
|
||||
*/
|
||||
package cn.dev33.satoken.json;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import cn.dev33.satoken.error.SaErrorCode;
|
||||
import cn.dev33.satoken.exception.NotImplException;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* JSON 转换器,默认实现类
|
||||
*
|
||||
@ -33,12 +33,17 @@ public class SaJsonTemplateDefaultImpl implements SaJsonTemplate {
|
||||
public static final String ERROR_MESSAGE = "未实现具体的 json 转换器";
|
||||
|
||||
@Override
|
||||
public String toJsonString(Object obj) {
|
||||
public String objectToJson(Object obj) {
|
||||
throw new NotImplException(ERROR_MESSAGE).setCode(SaErrorCode.CODE_10003);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> parseJsonToMap(String jsonStr) {
|
||||
public Object jsonToObject(String jsonStr) {
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -159,7 +159,7 @@ public class SaResult extends LinkedHashMap<String, Object> implements Serializa
|
||||
* @return 对象自身
|
||||
*/
|
||||
public SaResult setJsonString(String jsonString) {
|
||||
Map<String, Object> map = SaManager.getSaJsonTemplate().parseJsonToMap(jsonString);
|
||||
Map<String, Object> map = SaManager.getSaJsonTemplate().jsonToMap(jsonString);
|
||||
return setMap(map);
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,64 @@
|
||||
package com.pj.model;
|
||||
|
||||
/**
|
||||
* Role 实体类
|
||||
*
|
||||
* @author click33
|
||||
* @since 2022-10-15
|
||||
*/
|
||||
public class SysRole {
|
||||
//
|
||||
// public SysRole() {
|
||||
// }
|
||||
//
|
||||
// public SysRole(long id, String name) {
|
||||
// super();
|
||||
// this.id = id;
|
||||
// this.name = name;
|
||||
// }
|
||||
//
|
||||
//
|
||||
// /**
|
||||
// * 角色id
|
||||
// */
|
||||
// private long id;
|
||||
//
|
||||
// /**
|
||||
// * 角色名称
|
||||
// */
|
||||
// private String name;
|
||||
//
|
||||
// /**
|
||||
// * @return id
|
||||
// */
|
||||
// public long getId() {
|
||||
// return id;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * @param id 要设置的 id
|
||||
// */
|
||||
// public void setId(long id) {
|
||||
// this.id = id;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * @return name
|
||||
// */
|
||||
// public String getName() {
|
||||
// return name;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * @param name 要设置的 name
|
||||
// */
|
||||
// public void setName(String name) {
|
||||
// this.name = name;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String toString() {
|
||||
// return "SysRole [id=" + id + ", name=" + name + "]";
|
||||
// }
|
||||
//
|
||||
}
|
@ -34,6 +34,11 @@ public class SysUser {
|
||||
*/
|
||||
private int age;
|
||||
|
||||
/**
|
||||
* 用户角色
|
||||
*/
|
||||
private SysRole role;
|
||||
|
||||
/**
|
||||
* @return id
|
||||
*/
|
||||
@ -76,9 +81,23 @@ public class SysUser {
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
public SysRole getRole() {
|
||||
return role;
|
||||
}
|
||||
|
||||
public SysUser setRole(SysRole role) {
|
||||
this.role = role;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SysUser [id=" + id + ", name=" + name + ", age=" + age + "]";
|
||||
return "SysUser{" +
|
||||
"id=" + id +
|
||||
", name='" + name + '\'' +
|
||||
", age=" + age +
|
||||
", role=" + role +
|
||||
'}';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -25,13 +25,38 @@ import java.util.Map;
|
||||
* @since 2.0
|
||||
*/
|
||||
public class SaJsonTemplateForSnack3 implements SaJsonTemplate {
|
||||
|
||||
/**
|
||||
* 序列化:对象 -> json 字符串
|
||||
*
|
||||
* @param obj /
|
||||
* @return /
|
||||
*/
|
||||
@Override
|
||||
public String toJsonString(Object o) {
|
||||
return ONode.stringify(o);
|
||||
public String objectToJson(Object obj) {
|
||||
return ONode.stringify(obj);
|
||||
}
|
||||
|
||||
/**
|
||||
* 反序列化:json 字符串 → 对象
|
||||
*
|
||||
* @param jsonStr /
|
||||
* @return /
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> parseJsonToMap(String s) {
|
||||
return ONode.deserialize(s, Map.class);
|
||||
public Object jsonToObject(String jsonStr) {
|
||||
return ONode.deserialize(jsonStr);
|
||||
}
|
||||
|
||||
/**
|
||||
* 反序列化:json 字符串 → Map
|
||||
*
|
||||
* @param jsonStr /
|
||||
* @return /
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> jsonToMap(String jsonStr) {
|
||||
return ONode.deserialize(jsonStr, Map.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -32,6 +32,9 @@ public interface SaSpringBootErrorCode {
|
||||
/** JSON 字符串转 Map 失败 */
|
||||
int CODE_20104 = 20104;
|
||||
|
||||
/** JSON 字符串转 Object 失败 */
|
||||
int CODE_20106 = 20106;
|
||||
|
||||
/** 默认的 Filter 异常处理函数 */
|
||||
int CODE_20105 = 20105;
|
||||
|
||||
|
@ -18,8 +18,12 @@ package cn.dev33.satoken.spring.json;
|
||||
import cn.dev33.satoken.error.SaSpringBootErrorCode;
|
||||
import cn.dev33.satoken.exception.SaJsonConvertException;
|
||||
import cn.dev33.satoken.json.SaJsonTemplate;
|
||||
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator;
|
||||
import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@ -36,23 +40,60 @@ public class SaJsonTemplateForJackson implements SaJsonTemplate {
|
||||
*/
|
||||
public ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
public SaJsonTemplateForJackson() {
|
||||
|
||||
// 1、使 objectMapper 序列化时带上类型信息,以便该 json 字符串可以成功反序列化
|
||||
// 构建反序列化限制器,此处可以限制只允许指定类型或指定包下的类型才可以反序列化,此处指定所有类型都可以反序列化
|
||||
PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder()
|
||||
// 允许所有子类型反序列化(即反序列化时遇到的类)
|
||||
.allowIfSubType(Object.class)
|
||||
// 允许所有基类型反序列化(如 Object、自定义抽象类)
|
||||
.allowIfBaseType(Object.class)
|
||||
.build();
|
||||
// 启用全局默认类型(嵌入类型信息)
|
||||
objectMapper.activateDefaultTyping(
|
||||
ptv,
|
||||
// 对非 final 类嵌入类型信息
|
||||
ObjectMapper.DefaultTyping.NON_FINAL,
|
||||
// 类型信息以属性形式存在("@class")
|
||||
JsonTypeInfo.As.PROPERTY
|
||||
);
|
||||
|
||||
// 2、使空 bean 在序列化时也能记录类型信息,而不是只序列化成 {}
|
||||
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 将任意对象转换为 json 字符串
|
||||
* 序列化:对象 -> json 字符串
|
||||
*/
|
||||
@Override
|
||||
public String toJsonString(Object obj) {
|
||||
public String objectToJson(Object obj) {
|
||||
try {
|
||||
return objectMapper.writeValueAsString(obj);
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new SaJsonConvertException(e).setCode(SaSpringBootErrorCode.CODE_20103);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 将 json 字符串解析为 Map
|
||||
* 反序列化:json 字符串 → 对象
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> parseJsonToMap(String jsonStr) {
|
||||
public Object jsonToObject(String jsonStr) {
|
||||
try {
|
||||
Object value = objectMapper.readValue(jsonStr, Object.class);
|
||||
return value;
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new SaJsonConvertException(e).setCode(SaSpringBootErrorCode.CODE_20106);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 反序列化:json 字符串 → Map
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> jsonToMap(String jsonStr) {
|
||||
try {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> map = objectMapper.readValue(jsonStr, Map.class);
|
||||
|
Loading…
Reference in New Issue
Block a user