From 4ba1d7cf86ac2368187813654c6cf9695fd5537d Mon Sep 17 00:00:00 2001 From: zhouhao Date: Fri, 20 Dec 2024 12:04:34 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ezorm/core/DefaultExtensible.java | 36 +++++++++++++++++++ .../hswebframework/ezorm/core/Extensible.java | 3 +- .../ezorm/core/DefaultExtensibleTest.java | 31 ++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 hsweb-easy-orm-core/src/main/java/org/hswebframework/ezorm/core/DefaultExtensible.java create mode 100644 hsweb-easy-orm-core/src/test/java/org/hswebframework/ezorm/core/DefaultExtensibleTest.java diff --git a/hsweb-easy-orm-core/src/main/java/org/hswebframework/ezorm/core/DefaultExtensible.java b/hsweb-easy-orm-core/src/main/java/org/hswebframework/ezorm/core/DefaultExtensible.java new file mode 100644 index 00000000..5c14083f --- /dev/null +++ b/hsweb-easy-orm-core/src/main/java/org/hswebframework/ezorm/core/DefaultExtensible.java @@ -0,0 +1,36 @@ +package org.hswebframework.ezorm.core; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Setter; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +@Setter +public class DefaultExtensible implements Extensible { + + private Map extensions; + + @JsonIgnore + public Map getExtensions() { + return extensions; + } + + @Override + @JsonAnyGetter + public Map extensions() { + return extensions == null ? Collections.emptyMap() : extensions; + } + + @Override + @JsonAnySetter + public synchronized void setExtension(String property, Object value) { + if (extensions == null) { + extensions = new HashMap<>(); + } + extensions.put(property, value); + } +} diff --git a/hsweb-easy-orm-core/src/main/java/org/hswebframework/ezorm/core/Extensible.java b/hsweb-easy-orm-core/src/main/java/org/hswebframework/ezorm/core/Extensible.java index b49eb51d..85cd64da 100644 --- a/hsweb-easy-orm-core/src/main/java/org/hswebframework/ezorm/core/Extensible.java +++ b/hsweb-easy-orm-core/src/main/java/org/hswebframework/ezorm/core/Extensible.java @@ -1,5 +1,6 @@ package org.hswebframework.ezorm.core; +import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; import java.util.Map; @@ -17,7 +18,7 @@ public interface Extensible { * * @return 扩展属性 */ - @JsonAnySetter + @JsonAnyGetter Map extensions(); /** diff --git a/hsweb-easy-orm-core/src/test/java/org/hswebframework/ezorm/core/DefaultExtensibleTest.java b/hsweb-easy-orm-core/src/test/java/org/hswebframework/ezorm/core/DefaultExtensibleTest.java new file mode 100644 index 00000000..e8ad8e0d --- /dev/null +++ b/hsweb-easy-orm-core/src/test/java/org/hswebframework/ezorm/core/DefaultExtensibleTest.java @@ -0,0 +1,31 @@ +package org.hswebframework.ezorm.core; + +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.SneakyThrows; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class DefaultExtensibleTest { + + + @Test + @SneakyThrows + public void testJson() { + DefaultExtensible entity = new DefaultExtensible(); + + entity.setExtension("extName", "test"); + + ObjectMapper mapper = new ObjectMapper(); + + String json = mapper.writerFor(DefaultExtensible.class).writeValueAsString(entity); + + System.out.println(json); + DefaultExtensible decoded = mapper.readerFor(DefaultExtensible.class).readValue(json); + + assertNotNull(decoded.getExtension("extName")); + + assertEquals(entity.getExtension("extName"), decoded.getExtension("extName")); + } + +} \ No newline at end of file