Browse Source

支持重入型转换

James 5 years ago
parent
commit
561d7df88e

+ 6 - 0
src/main/java/com/jfinal/json/JFinalJson.java

@@ -55,6 +55,12 @@ public class JFinalJson extends Json {
 		
 		JsonResult ret = TL.get();
 		try {
+			
+			// 重入型转换场景,需要新建对象使用
+			if (ret.isInUse()) {
+				ret = new JsonResult();
+			}
+			
 			// 优先使用对象级的属性 datePattern, 然后才是全局性的 defaultDatePattern
 			String dp = datePattern != null ? datePattern : getDefaultDatePattern();
 			ret.init(dp, timestampPattern);

+ 15 - 2
src/main/java/com/jfinal/json/JFinalJsonKit.java

@@ -583,17 +583,22 @@ public class JFinalJsonKit {
 		
 		String datePattern;
 		String timestampPattern;
+		boolean inUse = false;
 		
 		public void init(String datePattern, String timestampPattern) {
 			this.datePattern = datePattern;
 			this.timestampPattern = timestampPattern;
+			inUse = true;
 		}
 		
-		public String toString() {
-			return sb.toString();
+		// 用来判断当前是否处于重入型转换状态,如果为 true,则要使用 new JsonResult()
+		public boolean isInUse() {
+			return inUse;
 		}
 		
 		public void clear() {
+			inUse = false;
+			
 			// 释放空间占用过大的缓存
 			if (sb.length() > maxBufferSize) {
 				sb = new StringBuilder(Math.max(1024, maxBufferSize / 2));
@@ -602,6 +607,14 @@ public class JFinalJsonKit {
 			}
 		}
 		
+		public String toString() {
+			return sb.toString();
+		}
+		
+		public int length() {
+			return sb.length();
+		}
+		
 		public void addChar(char ch) {
 			sb.append(ch);
 		}