From f6c5131ad202bd58456a73576dd818cc238e0962 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Wed, 25 Feb 2026 19:55:09 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=E6=96=B0=E5=A2=9E=20sa-token-jackson3?= =?UTF-8?q?=20=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sa-token-test/pom.xml | 2 + sa-token-test/sa-token-easy-test/pom.xml | 38 +++++++ .../java/com/pj/test/SaJsonTemplateTest.java | 99 +++++++++++++++++ .../test/java/com/pj/test/model/SysRole.java | 64 +++++++++++ .../test/java/com/pj/test/model/SysUser.java | 103 ++++++++++++++++++ sa-token-test/sa-token-jackson3-test/pom.xml | 38 +++++++ .../test/SaJsonTemplateForJackson3Test.java | 103 ++++++++++++++++++ .../test/java/com/pj/test/model/SysRole.java | 64 +++++++++++ .../test/java/com/pj/test/model/SysUser.java | 103 ++++++++++++++++++ 9 files changed, 614 insertions(+) create mode 100644 sa-token-test/sa-token-easy-test/pom.xml create mode 100644 sa-token-test/sa-token-easy-test/src/test/java/com/pj/test/SaJsonTemplateTest.java create mode 100644 sa-token-test/sa-token-easy-test/src/test/java/com/pj/test/model/SysRole.java create mode 100644 sa-token-test/sa-token-easy-test/src/test/java/com/pj/test/model/SysUser.java create mode 100644 sa-token-test/sa-token-jackson3-test/pom.xml create mode 100644 sa-token-test/sa-token-jackson3-test/src/test/java/com/pj/test/SaJsonTemplateForJackson3Test.java create mode 100644 sa-token-test/sa-token-jackson3-test/src/test/java/com/pj/test/model/SysRole.java create mode 100644 sa-token-test/sa-token-jackson3-test/src/test/java/com/pj/test/model/SysUser.java diff --git a/sa-token-test/pom.xml b/sa-token-test/pom.xml index 5b28fc38..0704a08f 100644 --- a/sa-token-test/pom.xml +++ b/sa-token-test/pom.xml @@ -21,11 +21,13 @@ + sa-token-easy-test sa-token-springboot-test sa-token-jwt-test sa-token-temp-jwt-test sa-token-json-test + sa-token-jackson3-test sa-token-serializer-test diff --git a/sa-token-test/sa-token-easy-test/pom.xml b/sa-token-test/sa-token-easy-test/pom.xml new file mode 100644 index 00000000..cfd9295c --- /dev/null +++ b/sa-token-test/sa-token-easy-test/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + + cn.dev33 + sa-token-test + ${revision} + ../pom.xml + + jar + + sa-token-easy-test + sa-token-easy-test + sa-token-easy-test + + + + cn.dev33 + sa-token-jackson3 + ${revision} + + + + tools.jackson.core + jackson-databind + 3.0.0 + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + + + diff --git a/sa-token-test/sa-token-easy-test/src/test/java/com/pj/test/SaJsonTemplateTest.java b/sa-token-test/sa-token-easy-test/src/test/java/com/pj/test/SaJsonTemplateTest.java new file mode 100644 index 00000000..e426baf0 --- /dev/null +++ b/sa-token-test/sa-token-easy-test/src/test/java/com/pj/test/SaJsonTemplateTest.java @@ -0,0 +1,99 @@ +package com.pj.test; + +import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.exception.NotImplException; +import cn.dev33.satoken.json.SaJsonTemplateDefaultImpl; +import cn.dev33.satoken.json.SaJsonTemplateForJackson3; +import com.pj.test.model.SysUser; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; +import java.util.Map; + +/** + * Sa-Token json 序列化模块测试 + * + * @author click33 + * + */ +public class SaJsonTemplateTest { + + // 开始 + @BeforeAll + public static void beforeClass() { + System.out.println("\n\n------------------------ SaJsonTemplateTest star ..."); + } + + // 结束 + @AfterAll + public static void afterClass() { + System.out.println("\n\n------------------------ SaJsonTemplateTest end ... \n"); + } + + // 测试:DefaultImpl + @Test + public void testDefaultImpl() { + SaManager.setSaJsonTemplate(new SaJsonTemplateDefaultImpl()); + Assertions.assertEquals(SaManager.getSaJsonTemplate().getClass(), SaJsonTemplateDefaultImpl.class); + + // test Object -> Json + SysUser user = new SysUser(10001, "张三", 18); + Assertions.assertThrows(NotImplException.class, () -> SaManager.getSaJsonTemplate().objectToJson(user) ); + Assertions.assertThrows(NotImplException.class, () -> SaManager.getSaJsonTemplate().jsonToObject("xxx", SysUser.class) ); + Assertions.assertThrows(NotImplException.class, () -> SaManager.getSaJsonTemplate().jsonToObject("xxx") ); + Assertions.assertThrows(NotImplException.class, () -> SaManager.getSaJsonTemplate().jsonToMap("xxx") ); + } + + // 测试:Jackson3 + @Test + public void testJackson3() { + SaManager.setSaJsonTemplate(new SaJsonTemplateForJackson3()); + Assertions.assertEquals(SaJsonTemplateForJackson3.class, SaManager.getSaJsonTemplate().getClass()); + + // test Object -> Json + SysUser user = new SysUser(10001, "张三", 18); + String objectJson = SaManager.getSaJsonTemplate().objectToJson(user); + // 与 json2 不同点:Jackson 3 默认按字母序排列属性 + Assertions.assertEquals("{\"@class\":\"com.pj.test.model.SysUser\",\"age\":18,\"id\":10001,\"name\":\"张三\",\"role\":null}", objectJson); + + // test Json -> Object + SysUser user2 = SaManager.getSaJsonTemplate().jsonToObject(objectJson, SysUser.class); + Assertions.assertEquals(user2.toString(), user.toString()); + + SysUser user3 = (SysUser)SaManager.getSaJsonTemplate().jsonToObject(objectJson); + Assertions.assertEquals(user3.toString(), user.toString()); + + // more + testNull(); + testMap(); + } + + // 测试 Map 的转换 + private void testMap() { + + // test Map -> Json + Map map = new HashMap<>(); + map.put("id", 10001); + map.put("name", "张三"); + map.put("age", 18); + String mapJson = SaManager.getSaJsonTemplate().objectToJson(map); + Assertions.assertEquals("{\"name\":\"张三\",\"id\":10001,\"age\":18}", mapJson); + + // test Json -> Map + Map map2 = SaManager.getSaJsonTemplate().jsonToMap(mapJson); + Assertions.assertEquals(map2.toString(), map.toString()); + + } + + // 测试 Null 值 + private void testNull() { + Assertions.assertNull(SaManager.getSaJsonTemplate().objectToJson(null)); + Assertions.assertNull(SaManager.getSaJsonTemplate().jsonToObject(null, SysUser.class)); + Assertions.assertNull(SaManager.getSaJsonTemplate().jsonToObject(null)); + Assertions.assertNull(SaManager.getSaJsonTemplate().jsonToMap(null)); + } + +} diff --git a/sa-token-test/sa-token-easy-test/src/test/java/com/pj/test/model/SysRole.java b/sa-token-test/sa-token-easy-test/src/test/java/com/pj/test/model/SysRole.java new file mode 100644 index 00000000..c66b66f5 --- /dev/null +++ b/sa-token-test/sa-token-easy-test/src/test/java/com/pj/test/model/SysRole.java @@ -0,0 +1,64 @@ +package com.pj.test.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 + "]"; +// } +// +} diff --git a/sa-token-test/sa-token-easy-test/src/test/java/com/pj/test/model/SysUser.java b/sa-token-test/sa-token-easy-test/src/test/java/com/pj/test/model/SysUser.java new file mode 100644 index 00000000..5406d82f --- /dev/null +++ b/sa-token-test/sa-token-easy-test/src/test/java/com/pj/test/model/SysUser.java @@ -0,0 +1,103 @@ +package com.pj.test.model; + +/** + * User 实体类 + * + * @author click33 + * @since 2022-10-15 + */ +public class SysUser { + + public SysUser() { + } + + public SysUser(long id, String name, int age) { + super(); + this.id = id; + this.name = name; + this.age = age; + } + + + /** + * 用户id + */ + private long id; + + /** + * 用户名称 + */ + private String name; + + /** + * 用户年龄 + */ + private int age; + + /** + * 用户角色 + */ + private SysRole role; + + /** + * @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; + } + + /** + * @return age + */ + public int getAge() { + return age; + } + + /** + * @param age 要设置的 age + */ + public void setAge(int age) { + 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 + + ", role=" + role + + '}'; + } + +} diff --git a/sa-token-test/sa-token-jackson3-test/pom.xml b/sa-token-test/sa-token-jackson3-test/pom.xml new file mode 100644 index 00000000..cf898f48 --- /dev/null +++ b/sa-token-test/sa-token-jackson3-test/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + + cn.dev33 + sa-token-test + ${revision} + ../pom.xml + + jar + + sa-token-jackson3-test + sa-token-jackson3-test + sa-token-jackson3-test + + + + cn.dev33 + sa-token-jackson3 + ${revision} + + + + tools.jackson.core + jackson-databind + 3.0.0 + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + + + diff --git a/sa-token-test/sa-token-jackson3-test/src/test/java/com/pj/test/SaJsonTemplateForJackson3Test.java b/sa-token-test/sa-token-jackson3-test/src/test/java/com/pj/test/SaJsonTemplateForJackson3Test.java new file mode 100644 index 00000000..324d3c4d --- /dev/null +++ b/sa-token-test/sa-token-jackson3-test/src/test/java/com/pj/test/SaJsonTemplateForJackson3Test.java @@ -0,0 +1,103 @@ +package com.pj.test; + +import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.json.SaJsonTemplateForJackson3; +import com.pj.test.model.SysUser; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; +import java.util.Map; + +/** + * Sa-Token-jackson3 序列化模块测试 + * + *
+ * 为什么单独写一个模块来测试 Jackson 3 ?
+ *
+ * 在同一个项目里同时引入 jackson 2 和 jackson 3 后,
+ * 执行:
+ *      SysUser user3 = (SysUser)SaManager.getSaJsonTemplate().jsonToObject(objectJson);
+ * 会报错:
+ *      java.lang.NoSuchFieldError: POJO
+ * 	        at tools.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:399)
+ * 	        at tools.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:361)
+ * 	        at tools.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:265)
+ * 	        at tools.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
+ * 	        at tools.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:158)
+ * 	        at tools.jackson.databind.DeserializationContext.findNonContextualValueDeserializer(DeserializationContext.java:733)
+ * 	        at tools.jackson.databind.deser.jdk.UntypedObjectDeserializer._findCustomDeser(UntypedObjectDeserializer.java:179)
+ * 	        at tools.jackson.databind.deser.jdk.UntypedObjectDeserializer.resolve(UntypedObjectDeserializer.java:152)
+ *
+ * 暂未找到解决方案,所以只能单独写一个测试类来测试 Jackson 3 的功能了。
+ *
+ * 
+ * @author click33 + * + */ +public class SaJsonTemplateForJackson3Test { + + // 开始 + @BeforeAll + public static void beforeClass() { + System.out.println("\n\n------------------------ SaJsonTemplateForJackson3 Test star ..."); + } + + // 结束 + @AfterAll + public static void afterClass() { + System.out.println("\n\n------------------------ SaJsonTemplateForJackson3 Test end ... \n"); + } + + // 测试:Jackson3 + @Test + public void testJackson3() { + SaManager.setSaJsonTemplate(new SaJsonTemplateForJackson3()); + Assertions.assertEquals(SaJsonTemplateForJackson3.class, SaManager.getSaJsonTemplate().getClass()); + + // test Object -> Json + SysUser user = new SysUser(10001, "张三", 18); + String objectJson = SaManager.getSaJsonTemplate().objectToJson(user); + // 与 json2 不同点:Jackson 3 默认按字母序排列属性 + Assertions.assertEquals("{\"@class\":\"com.pj.test.model.SysUser\",\"age\":18,\"id\":10001,\"name\":\"张三\",\"role\":null}", objectJson); + + // test Json -> Object + SysUser user2 = SaManager.getSaJsonTemplate().jsonToObject(objectJson, SysUser.class); + Assertions.assertEquals(user2.toString(), user.toString()); + + SysUser user3 = (SysUser)SaManager.getSaJsonTemplate().jsonToObject(objectJson); + Assertions.assertEquals(user3.toString(), user.toString()); + + // more + testNull(); + testMap(); + } + + // 测试 Map 的转换 + private void testMap() { + + // test Map -> Json + Map map = new HashMap<>(); + map.put("id", 10001); + map.put("name", "张三"); + map.put("age", 18); + String mapJson = SaManager.getSaJsonTemplate().objectToJson(map); + Assertions.assertEquals("{\"name\":\"张三\",\"id\":10001,\"age\":18}", mapJson); + + // test Json -> Map + Map map2 = SaManager.getSaJsonTemplate().jsonToMap(mapJson); + Assertions.assertEquals(map2.toString(), map.toString()); + + } + + // 测试 Null 值 + private void testNull() { + Assertions.assertNull(SaManager.getSaJsonTemplate().objectToJson(null)); + Assertions.assertNull(SaManager.getSaJsonTemplate().jsonToObject(null, SysUser.class)); + Assertions.assertNull(SaManager.getSaJsonTemplate().jsonToObject(null)); + Assertions.assertNull(SaManager.getSaJsonTemplate().jsonToMap(null)); + } + +} diff --git a/sa-token-test/sa-token-jackson3-test/src/test/java/com/pj/test/model/SysRole.java b/sa-token-test/sa-token-jackson3-test/src/test/java/com/pj/test/model/SysRole.java new file mode 100644 index 00000000..c66b66f5 --- /dev/null +++ b/sa-token-test/sa-token-jackson3-test/src/test/java/com/pj/test/model/SysRole.java @@ -0,0 +1,64 @@ +package com.pj.test.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 + "]"; +// } +// +} diff --git a/sa-token-test/sa-token-jackson3-test/src/test/java/com/pj/test/model/SysUser.java b/sa-token-test/sa-token-jackson3-test/src/test/java/com/pj/test/model/SysUser.java new file mode 100644 index 00000000..5406d82f --- /dev/null +++ b/sa-token-test/sa-token-jackson3-test/src/test/java/com/pj/test/model/SysUser.java @@ -0,0 +1,103 @@ +package com.pj.test.model; + +/** + * User 实体类 + * + * @author click33 + * @since 2022-10-15 + */ +public class SysUser { + + public SysUser() { + } + + public SysUser(long id, String name, int age) { + super(); + this.id = id; + this.name = name; + this.age = age; + } + + + /** + * 用户id + */ + private long id; + + /** + * 用户名称 + */ + private String name; + + /** + * 用户年龄 + */ + private int age; + + /** + * 用户角色 + */ + private SysRole role; + + /** + * @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; + } + + /** + * @return age + */ + public int getAge() { + return age; + } + + /** + * @param age 要设置的 age + */ + public void setAge(int age) { + 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 + + ", role=" + role + + '}'; + } + +}