浏览代码

添加 Func.F21<Boolean, Object, Boolean> okFailHandler,配置
Ret.isOk()、Ret.isFail() 在前两个 if 判断都没有 return 之后的处理回调,用于支持多于两个状态的情况,也即在
ok、fail 两个状态之外还引入了其它状态

James 3 年之前
父节点
当前提交
e5cc6e1514
共有 2 个文件被更改,包括 42 次插入0 次删除
  1. 25 0
      src/main/java/com/jfinal/kit/CPI.java
  2. 17 0
      src/main/java/com/jfinal/kit/Ret.java

+ 25 - 0
src/main/java/com/jfinal/kit/CPI.java

@@ -120,6 +120,27 @@ public class CPI {
 		Ret.stateWatcher = stateWatcher;
 	}
 	
+	/**
+	 * 配置 Ret.isOk()、Ret.isFail() 在前两个 if 判断都没有 return 之后的处理回调
+	 * 用于支持多于两个状态的情况,也即在 ok、fail 两个状态之外还引入了其它状态
+	 * <pre>
+	 * 例子:
+	 *   CPI.setRetOkFailHandler((isOkMethod, value) -> {
+	 *     if (isOkMethod == Boolean.TRUE) {
+	 *        return false;
+	 *     } else {
+	 *        return true;
+	 *     }
+	 *   });
+	 * </pre>
+	 */
+	public static void setRetOkFailHandler(Func.F21<Boolean, Object, Boolean> okFailHandler) {
+		if (okFailHandler == null) {
+			throw new IllegalArgumentException("okFailHandler 不能 null");
+		}
+		Ret.okFailHandler = okFailHandler;
+	}
+	
 	public static String getRetStateName() {
 		return Ret.STATE;
 	}
@@ -147,6 +168,10 @@ public class CPI {
 	public static Func.F30<Ret, String, Object> getRetStateWatcher() {
 		return Ret.stateWatcher;
 	}
+	
+	public static Func.F21<Boolean, Object, Boolean> getRetOkFailHandler() {
+		return Ret.okFailHandler;
+	}
 }
 
 

+ 17 - 0
src/main/java/com/jfinal/kit/Ret.java

@@ -73,6 +73,16 @@ import com.jfinal.json.Json;
  *         ret.set("success", "ok".equals(value));
  *     });
  *   在前后端分离项目中,有些前端框架需要该返回值:"success" : true/false
+ * 
+ * 6:配置 Ret.isOk()、Ret.isFail() 在前两个 if 判断都没有 return 之后的处理回调
+ *    用于支持多于两个状态的情况,也即在 ok、fail 两个状态之外还引入了其它状态
+ *     CPI.setRetOkFailHandler((isOkMethod, value) -> {
+ *         if (isOkMethod == Boolean.TRUE) {
+ *             return false;
+ *         } else {
+ *             return true;
+ *         }
+ *     });
  * </pre>
  */
 @SuppressWarnings({"rawtypes", "unchecked"})
@@ -87,6 +97,7 @@ public class Ret extends HashMap {
 	static Object STATE_OK = "ok";
 	static Object STATE_FAIL = "fail";
 	static Func.F30<Ret, String, Object> stateWatcher = null;
+	static Func.F21<Boolean, Object, Boolean> okFailHandler = null;
 	
 	/**
 	 * 数据
@@ -201,6 +212,9 @@ public class Ret extends HashMap {
 		if (STATE_FAIL.equals(state)) {
 			return false;
 		}
+		if (okFailHandler != null) {
+			return okFailHandler.call(Boolean.TRUE, state);
+		}
 		
 		throw new IllegalStateException("调用 isOk() 之前,必须先调用 ok()、fail() 或者 setOk()、setFail() 方法");
 	}
@@ -213,6 +227,9 @@ public class Ret extends HashMap {
 		if (STATE_OK.equals(state)) {
 			return false;
 		}
+		if (okFailHandler != null) {
+			return okFailHandler.call(Boolean.FALSE, state);
+		}
 		
 		throw new IllegalStateException("调用 isFail() 之前,必须先调用 ok()、fail() 或者 setOk()、setFail() 方法");
 	}