diff --git a/common/src/main/java/com/jeesite/common/web/http/ResultUtils.java b/common/src/main/java/com/jeesite/common/web/http/ResultUtils.java new file mode 100644 index 00000000..baa9d14e --- /dev/null +++ b/common/src/main/java/com/jeesite/common/web/http/ResultUtils.java @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + * No deletion without permission, or be held responsible to law. + */ +package com.jeesite.common.web.http; + +import com.jeesite.common.io.PropertiesUtils; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +/** + * 统一包装结果输出类:{ code: 200, msg: "", data: {} | [] } + * @author ThinkGem + * @version 2024-07-24 + */ +public class ResultUtils { + + private static final boolean isDefaultResult = PropertiesUtils.getInstance() + .getPropertyToBoolean("web.isDefaultResult", "false"); + private static final String resultParamName = PropertiesUtils.getInstance() + .getProperty("web.resultParamName", "__data"); + private static final String headerParamName = PropertiesUtils.getInstance() + .getProperty("web.headerParamName", "x-data"); + + /** + * 设置 web.isResult 参数可强制全局使用统一结果输出,否则,传递 __data=true 参数,或 x-data 请求头为 true 时启用 + * @author ThinkGem + */ + public static Object result(Object data, HttpServletRequest request, HttpServletResponse response) { + if (request != null && response != null && (isDefaultResult || ( + "true".equals(request.getParameter(resultParamName)) + || "true".equals(request.getHeader(headerParamName))))) { + Object msg = request.getAttribute("message"); + return new Result(response.getStatus(), msg, data); + } + return data; + } + + /** + * 结果对象 + * @author ThinkGem + * @version 2024-07-24 + */ + private static class Result { + private int code; + private String msg; + private Object data; + + public Result(int code, Object msg, Object data) { + this.code = code; + this.msg = msg != null ? msg.toString() : null; + this.data = data; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + } + +} diff --git a/common/src/main/java/com/jeesite/common/web/http/ServletUtils.java b/common/src/main/java/com/jeesite/common/web/http/ServletUtils.java index 8bada0e7..fcf017a5 100644 --- a/common/src/main/java/com/jeesite/common/web/http/ServletUtils.java +++ b/common/src/main/java/com/jeesite/common/web/http/ServletUtils.java @@ -258,6 +258,7 @@ public class ServletUtils { if (object == null) { object = resultMap; } + object = ResultUtils.result(object, request, response); if (jsonView != null) { return JsonMapper.toJson(object, jsonView); }else { @@ -331,6 +332,7 @@ public class ServletUtils { object = new JSONPObject(functionName, object); } } + object = ResultUtils.result(object, request, response); if (jsonView != null) { return renderString(response, JsonMapper.toJson(object, jsonView)); }else { @@ -358,18 +360,7 @@ public class ServletUtils { try { // response.reset(); // 注释掉,否则以前设置的Header会被清理掉,如ajax登录设置记住我的Cookie信息 if (type == null && StringUtils.isBlank(response.getContentType())){ - if ((StringUtils.startsWith(string, "{") && StringUtils.endsWith(string, "}")) - || (StringUtils.startsWith(string, "[") && StringUtils.endsWith(string, "]"))){ - type = MediaType.APPLICATION_JSON_VALUE; - }else if (StringUtils.startsWith(string, "<") && StringUtils.endsWith(string, ">")){ - if (StringUtils.startsWith(string, "")){ + if (StringUtils.startsWith(string, "