浏览代码

新增静态 data、state 方法,删除静态 fail(Object, Object)、ok(Object、Object)

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

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

@@ -75,6 +75,51 @@ public class CPI {
 		Ret.MSG = msgName;
 	}
 	
+	/**
+	 * 配置 Ret 的 data 名,默认值为:"data"
+	 * <pre>
+	 * 例子:
+	 *   CPI.setRetData("body")
+	 *   将 Ret 的数据字段名由 "data" 改为 "body"
+	 * </pre>
+	 */
+	public static void setRetData(String dataName) {
+		if (StrKit.isBlank(dataName)) {
+			throw new IllegalArgumentException("dataName 不能为空");
+		}
+		Ret.DATA = dataName;
+	}
+	
+	/**
+	 * 配置 Ret 的 data 方法伴随 ok 状态,默认值为:true
+	 * <pre>
+	 * 例子:
+	 *   CPI.setRetDataWithOkState(false)
+	 *   将 Ret 的 data 方法伴随 ok 状态,改为不伴随 ok 状态
+	 * </pre>
+	 */
+	public static void setRetDataWithOkState(boolean dataWithOkState) {
+		Ret.dataWithOkState = dataWithOkState;
+	}
+	
+	/**
+	 * 配置 state 监听
+	 * <pre>
+	 * 例子:
+	 *   CPI.setRetStateWatcher((ret, state, value) -> {
+	 *     ret.set("success", "ok".equals(value));
+	 *   });
+	 *   监听 state,当值为 "ok" 时,额外放入 "success" 值为 true,否则为 false,
+	 *   在前后端分离项目中,有些前端框架需要该返回值:"success" : true/false
+	 * </pre>
+	 */
+	public static void setRetStateWatcher(Func.F30<Ret, String, Object> stateWatcher) {
+		if (stateWatcher == null) {
+			throw new IllegalArgumentException("stateWatcher 不能 null");
+		}
+		Ret.stateWatcher = stateWatcher;
+	}
+	
 	public static String getRetStateName() {
 		return Ret.STATE;
 	}
@@ -90,6 +135,18 @@ public class CPI {
 	public static String getMsgName() {
 		return Ret.MSG;
 	}
+	
+	public static String getRetDataName() {
+		return Ret.DATA;
+	}
+	
+	public static boolean getDataWithOkState() {
+		return Ret.dataWithOkState;
+	}
+	
+	public static Func.F30<Ret, String, Object> getRetStateWatcher() {
+		return Ret.stateWatcher;
+	}
 }
 
 

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

@@ -45,7 +45,7 @@ import com.jfinal.json.Json;
  *    }
  *  
  * 3:普通应用程序通常这么用:
- *   String json = HttpKit.readData(getRequest());
+ *   String json = getRawData();
  *   Ret ret = FastJson.getJson().parse(json, Ret.class);
  *   if (ret.isOk()) {
  *   	...
@@ -64,27 +64,49 @@ import com.jfinal.json.Json;
  * 
  * 3:将消息字段名由 "msg" 改为 "message"
  *     CPI.setRetMsg("message")
+ * 
+ * 4:配置 Ret 的 data(Object) 方法伴随 ok 状态,默认值为:false
+ *     CPI.setRetDataWithOkState(true)
+ * 
+ * 5:配置监听 state 值,当值为 "ok" 时,额外放入 "success" 值为 true,否则为 false
+ *     CPI.setRetStateWatcher((ret, state, value) -> {
+ *         ret.set("success", "ok".equals(value));
+ *     });
+ *   在前后端分离项目中,有些前端框架需要该返回值:"success" : true/false
  * </pre>
  */
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class Ret extends HashMap {
 	
-	private static final long serialVersionUID = -3021472182023759198L;
+	private static final long serialVersionUID = -2241467317630428582L;
 	
+	/**
+	 * 状态
+	 */
 	static String STATE = "state";
 	static Object STATE_OK = "ok";
 	static Object STATE_FAIL = "fail";
+	static Func.F30<Ret, String, Object> stateWatcher = null;
 	
+	/**
+	 * 数据
+	 */
+	static String DATA = "data";
+	static boolean dataWithOkState = false;			// data(Object) 方法伴随 ok 状态
+	
+	/**
+	 * 消息
+	 */
 	static String MSG = "msg";
 	
 	public Ret() {
 	}
 	
-	public static Ret by(Object key, Object value) {
+	public static Ret of(Object key, Object value) {
 		return new Ret().set(key, value);
 	}
 	
-	public static Ret create(Object key, Object value) {
+	public static Ret by(Object key, Object value) {
 		return new Ret().set(key, value);
 	}
 	
@@ -96,36 +118,56 @@ public class Ret extends HashMap {
 		return new Ret().setOk();
 	}
 	
-	public static Ret ok(Object key, Object value) {
-		return ok().set(key, value);
-	}
-	
 	public static Ret ok(String msg) {
-		return ok().set(MSG, msg);
+		return new Ret().setOk()._setMsg(msg);
 	}
 	
 	public static Ret fail() {
 		return new Ret().setFail();
 	}
 	
-	public static Ret fail(Object key, Object value) {
-		return fail().set(key, value);
+	public static Ret fail(String msg) {
+		return new Ret().setFail()._setMsg(msg);
 	}
 	
-	public static Ret fail(String msg) {
-		return fail().set(MSG, msg);
+	public static Ret state(Object value) {
+		return new Ret()._setState(value);
 	}
 	
-	public Ret setOk() {
-		super.put(STATE, STATE_OK);
+	public static Ret data(Object data) {
+		Ret ret = new Ret()._setData(data);
+		return dataWithOkState ? ret.setOk() : ret;
+	}
+	
+	// 避免产生 setter/getter 方法,以免影响第三方 json 工具的行为
+	protected Ret _setState(Object value) {
+		super.put(STATE, value);
+		if (stateWatcher != null) {
+			stateWatcher.call(this, STATE, value);
+		}
 		return this;
 	}
 	
-	public Ret setFail() {
-		super.put(STATE, STATE_FAIL);
+	// 避免产生 setter/getter 方法,以免影响第三方 json 工具的行为
+	protected Ret _setData(Object data) {
+		super.put(DATA, data);
+		return this;
+	}
+	
+	// 避免产生 setter/getter 方法,以免影响第三方 json 工具的行为
+	protected Ret _setMsg(String msg) {
+		super.put(MSG, msg);
 		return this;
 	}
 	
+	public Ret setOk() {
+		return _setState(STATE_OK);
+	}
+	
+	public Ret setFail() {
+		return _setState(STATE_FAIL);
+	}
+	
 	public boolean isOk() {
 		Object state = get(STATE);
 		if (STATE_OK.equals(state)) {