From 5084ac39cf4f30ab476b2d96526f396834752e4d Mon Sep 17 00:00:00 2001 From: thinkgem Date: Wed, 24 Jul 2024 14:59:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20web.isDefaultResult=20?= =?UTF-8?q?=E5=8F=82=E6=95=B0=EF=BC=8C=E9=BB=98=E8=AE=A4=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E6=8E=A5=E5=8F=A3=E7=BB=93=E6=9E=9C=E5=8C=85?= =?UTF-8?q?=E8=A3=85=E4=B8=BA=20{=20code:=20200,=20msg:=20"",=20data:=20{}?= =?UTF-8?q?=20|=20[]=20}=EF=BC=9B=E6=96=B0=E5=A2=9E=20web.resultParamName?= =?UTF-8?q?=20=E5=92=8C=20headerParamName=20=E5=8F=82=E6=95=B0=EF=BC=8C?= =?UTF-8?q?=E5=AF=B9=E4=B8=AA=E5=88=AB=E7=BB=93=E6=9E=9C=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E5=8C=85=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeesite/common/web/http/ResultUtils.java | 80 +++++++++++++++++++ .../jeesite/common/web/http/ServletUtils.java | 36 ++++++--- .../main/resources/config/jeesite-core.yml | 10 ++- .../src/main/resources/config/application.yml | 8 ++ web/src/main/resources/config/application.yml | 8 ++ 5 files changed, 129 insertions(+), 13 deletions(-) create mode 100644 common/src/main/java/com/jeesite/common/web/http/ResultUtils.java 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, "