Просмотр исходного кода

Merge branch 'fix/#275' into 'develop'

修复scriptObjectMirror

See merge request o2oa/o2oa!1295
o2null 5 лет назад
Родитель
Сommit
0dda0c5105

+ 34 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/gson/ScriptObjectMirrorSerializer.java

@@ -0,0 +1,34 @@
+package com.x.base.core.project.gson;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonNull;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+import jdk.nashorn.api.scripting.ScriptObjectMirror;
+
+public class ScriptObjectMirrorSerializer implements JsonSerializer<ScriptObjectMirror> {
+	public JsonElement serialize(ScriptObjectMirror scriptObjectMirror, Type type, JsonSerializationContext context) {
+		if (null == scriptObjectMirror) {
+			return JsonNull.INSTANCE;
+		}
+		if (scriptObjectMirror.isArray()) {
+			List<Object> list = new ArrayList<>();
+			for (String str : scriptObjectMirror.getOwnKeys(false)) {
+				list.add(scriptObjectMirror.get(str));
+			}
+			return XGsonBuilder.instance().toJsonTree(list);
+		} else {
+			LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+			for (String str : scriptObjectMirror.getOwnKeys(false)) {
+				map.put(str, scriptObjectMirror.get(str));
+			}
+			return XGsonBuilder.instance().toJsonTree(map);
+		}
+	}
+}

+ 4 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/gson/XGsonBuilder.java

@@ -16,6 +16,7 @@ import com.google.gson.JsonParseException;
 import com.google.gson.JsonParser;
 import com.google.gson.JsonPrimitive;
 import com.x.base.core.project.tools.DateTools;
+import jdk.nashorn.api.scripting.ScriptObjectMirror;
 
 public class XGsonBuilder {
 
@@ -34,6 +35,7 @@ public class XGsonBuilder {
 					gson.registerTypeAdapter(Long.class, new LongDeserializer());
 					gson.registerTypeAdapter(Date.class, new DateDeserializer());
 					gson.registerTypeAdapter(Date.class, new DateSerializer());
+					gson.registerTypeAdapter(ScriptObjectMirror.class, new ScriptObjectMirrorSerializer());
 					INSTANCE = gson.setPrettyPrinting().create();
 				}
 			}
@@ -157,7 +159,7 @@ public class XGsonBuilder {
 		}
 		try {
 			JsonElement jsonElement = new JsonParser().parse(json);
-			if (jsonElement.isJsonObject()){
+			if (jsonElement.isJsonObject()) {
 				return true;
 			} else {
 				return false;
@@ -173,7 +175,7 @@ public class XGsonBuilder {
 		}
 		try {
 			JsonElement jsonElement = new JsonParser().parse(json);
-			if (jsonElement.isJsonArray()){
+			if (jsonElement.isJsonArray()) {
 				return true;
 			} else {
 				return false;