diff --git a/pom.xml b/pom.xml
index 86288443ed3f257536bdeed65cfef193642f9693..9116ea2439412bf6c17b0799715a66b8f8e3649c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,12 +7,12 @@
com.myjdbc
myjdbc-starter-parent
- 1.0.2
+ 1.1.1
com.myjdbc.web
myjdbc-web-core
- 1.0.0
+ 1.0.2
jar
diff --git a/src/main/java/com/myjdbc/web/core/abstracts/MyRestTemplate.java b/src/main/java/com/myjdbc/web/core/abstracts/MyRestTemplate.java
index 07ed22e7b23574531e9dc258d10d9c9247ff8b68..a10671f66f8774bdf13522406834a2616a361c3c 100644
--- a/src/main/java/com/myjdbc/web/core/abstracts/MyRestTemplate.java
+++ b/src/main/java/com/myjdbc/web/core/abstracts/MyRestTemplate.java
@@ -11,6 +11,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
+import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
@@ -73,6 +74,40 @@ public class MyRestTemplate {
return responseEntity.getBody();
}
+ /**
+ * Post请求并返回实体
+ * 多部分表格数据
+ *
+ * @param url 请求地址
+ * @param responseType 返回实体类型
+ * @param params 参数
+ * @param 返回实体泛型
+ *
+ * @return T
+ */
+ public T postFormData(String url, Class responseType, MultiValueMap params) {
+ return postForEntity(MediaType.MULTIPART_FORM_DATA, url, responseType, params);
+ }
+
+ /**
+ * Post请求并返回实体
+ *
+ * @param mediaType 媒体类型
+ * @param url 请求地址
+ * @param responseType 返回实体类型
+ * @param params 参数
+ * @param 返回实体泛型
+ *
+ * @return T
+ */
+ protected T postForEntity(MediaType mediaType, String url, Class responseType, MultiValueMap params) {
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(mediaType);
+ HttpEntity> httpEntity = new HttpEntity<>(params, headers);
+ ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, responseType);
+ return responseEntity.getBody();
+ }
+
/**
* 发起外部请求
*
diff --git a/src/main/java/com/myjdbc/web/core/exception/GlobalExceptionHandler.java b/src/main/java/com/myjdbc/web/core/exception/GlobalExceptionHandler.java
index b5220ce1582cf0e2a91a181cc5fe2a07c9976a79..1bec86742fb7af025bed0026e0833ca99451f176 100644
--- a/src/main/java/com/myjdbc/web/core/exception/GlobalExceptionHandler.java
+++ b/src/main/java/com/myjdbc/web/core/exception/GlobalExceptionHandler.java
@@ -1,10 +1,11 @@
package com.myjdbc.web.core.exception;
-import com.myjdbc.web.core.util.ResultUtil;
-import com.myjdbc.web.core.model.ResultBody;
import com.myjdbc.web.core.constants.BaseServiceType;
+import com.myjdbc.web.core.model.ResultBody;
+import com.myjdbc.web.core.util.ResultUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@@ -22,18 +23,29 @@ public class GlobalExceptionHandler implements BaseServiceType {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
+ private final IGlobalExceptionCallback globalExceptionCallback;
+
+ @Autowired
+ public GlobalExceptionHandler(IGlobalExceptionCallback globalExceptionCallback) {
+ this.globalExceptionCallback = globalExceptionCallback;
+ }
+
+
/**
* 处理自定义的业务异常
*
* @param req
* @param e
+ *
* @return
*/
@ExceptionHandler(value = BusinessException.class)
@ResponseBody
public ResultBody businessExceptionHandler(HttpServletRequest req, BusinessException e) {
logger.error("错误原因:{},错误详情:", e.getErrorMsg(), e.getErrorDetail());
- return ResultUtil.createResultInfo(e.getErrorCode(), e.errorMsg, e.errorDetail);
+ ResultBody resultBody = ResultUtil.createResultInfo(e.getErrorCode(), e.getErrorMsg(), e.getErrorDetail());
+ globalExceptionCallback.businessExceptionCallback(resultBody);
+ return resultBody;
}
/**
@@ -41,13 +53,16 @@ public class GlobalExceptionHandler implements BaseServiceType {
*
* @param req
* @param e
+ *
* @return
*/
@ExceptionHandler(value = NullPointerException.class)
@ResponseBody
public ResultBody exceptionHandler(HttpServletRequest req, NullPointerException e) {
logger.error("发生空指针异常!原因是:", e);
- return ResultUtil.createError("发生空指针异常", e.getMessage());
+ ResultBody resultBody = ResultUtil.createError("发生空指针异常", e.getMessage());
+ globalExceptionCallback.nullPointerExceptionCallback(resultBody);
+ return resultBody;
}
/**
@@ -55,13 +70,16 @@ public class GlobalExceptionHandler implements BaseServiceType {
*
* @param req
* @param e
+ *
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResultBody exceptionHandler(HttpServletRequest req, Exception e) {
logger.error("未知异常!原因是:", e);
- return ResultUtil.createError("未知异常", e.getMessage());
+ ResultBody resultBody = ResultUtil.createError("未知异常", e.getMessage());
+ globalExceptionCallback.unknownExceptionCallback(resultBody);
+ return resultBody;
}
}
\ No newline at end of file
diff --git a/src/main/java/com/myjdbc/web/core/exception/IGlobalExceptionCallback.java b/src/main/java/com/myjdbc/web/core/exception/IGlobalExceptionCallback.java
new file mode 100644
index 0000000000000000000000000000000000000000..e07e749e158d33e4e886527798cc3461a33a65f1
--- /dev/null
+++ b/src/main/java/com/myjdbc/web/core/exception/IGlobalExceptionCallback.java
@@ -0,0 +1,47 @@
+package com.myjdbc.web.core.exception;
+
+import com.myjdbc.web.core.model.ResultBody;
+
+/**
+ * 全局异常处理回调函数
+ *
+ * @author Chen Wen
+ * @date 11:38 2022/6/22
+ */
+public interface IGlobalExceptionCallback {
+
+ /**
+ * 业务异常处理程序
+ *
+ * @param resultBody
+ */
+ default void businessExceptionCallback(ResultBody resultBody) {
+ baseExceptionCallback(resultBody);
+ }
+
+ /**
+ * 空指针异常回调
+ *
+ * @param resultBody
+ */
+ default void nullPointerExceptionCallback(ResultBody resultBody) {
+ baseExceptionCallback(resultBody);
+ }
+
+ /**
+ * 未知异常回调
+ *
+ * @param resultBody
+ */
+ default void unknownExceptionCallback(ResultBody resultBody) {
+ baseExceptionCallback(resultBody);
+ }
+
+ /**
+ * 基础异常回调
+ *
+ * @param resultBody
+ */
+ default void baseExceptionCallback(ResultBody resultBody) {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/myjdbc/web/core/model/ResultBody.java b/src/main/java/com/myjdbc/web/core/model/ResultBody.java
index f023af3d933bff952727b50690d0f6901ffa3613..2e12ed307bd3f069544e5a7f6f52bddec322db80 100644
--- a/src/main/java/com/myjdbc/web/core/model/ResultBody.java
+++ b/src/main/java/com/myjdbc/web/core/model/ResultBody.java
@@ -2,15 +2,27 @@ package com.myjdbc.web.core.model;
import com.myjdbc.core.util.JsonUtil;
import lombok.Data;
+import lombok.ToString;
/**
- * 返回结果
+ * 返回消息实体
*
* @Author 陈文
* @Date 2020/05/27 23:02
*/
@Data
-public class ResultBody {
+@ToString(callSuper = true)
+public class ResultBody {
+
+ /**
+ * 消息唯一标识
+ */
+ private String id;
+
+ /**
+ * 消息类型
+ */
+ private String type;
/**
* 操作成功标识
@@ -35,7 +47,7 @@ public class ResultBody {
/**
* 附带信息
*/
- private Object data;
+ private T data;
/**
* 转换成Json对象
diff --git a/src/main/java/com/myjdbc/web/core/util/ResultUtil.java b/src/main/java/com/myjdbc/web/core/util/ResultUtil.java
index 82abd86fad09303cf75e73a757da58d813e54b88..77edb7f44106fab2d10d004914ce3078ec6e0a67 100644
--- a/src/main/java/com/myjdbc/web/core/util/ResultUtil.java
+++ b/src/main/java/com/myjdbc/web/core/util/ResultUtil.java
@@ -1,7 +1,7 @@
package com.myjdbc.web.core.util;
-import com.myjdbc.web.core.model.ResultBody;
import com.myjdbc.web.core.constants.BaseServiceType;
+import com.myjdbc.web.core.model.ResultBody;
/**
* 所有返回结果的基类
@@ -16,6 +16,7 @@ public class ResultUtil implements BaseServiceType {
* 传入BaseServiceType的对应值
*
* @param flag true成功,false失败
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -32,7 +33,9 @@ public class ResultUtil implements BaseServiceType {
* @param code 状态
* @param msg 信息
* @param detail 详情
+ *
* @return
+ *
* @author Chen Wen
* @date 0:31 2022/3/12
*/
@@ -57,6 +60,7 @@ public class ResultUtil implements BaseServiceType {
* 调用接口成功返回
*
* @param code 操作代码
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -78,6 +82,7 @@ public class ResultUtil implements BaseServiceType {
* 调用接口成功返回
*
* @param msg 提示给用户的信息
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -89,6 +94,7 @@ public class ResultUtil implements BaseServiceType {
* 调用接口成功返回
*
* @param data 需要传输到客户端(浏览器)的数据
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -101,6 +107,7 @@ public class ResultUtil implements BaseServiceType {
*
* @param code 操作代码
* @param msg 提示给用户的信息
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -114,6 +121,7 @@ public class ResultUtil implements BaseServiceType {
* @param code 操作代码
* @param msg 提示给用户的信息
* @param detail 提示给用户的详情
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -126,6 +134,7 @@ public class ResultUtil implements BaseServiceType {
*
* @param msg 提示给用户的信息
* @param detail 提示给用户的详情
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -139,6 +148,7 @@ public class ResultUtil implements BaseServiceType {
* @param msg 提示给用户的信息
* @param data 需要传输到客户端(浏览器)的数据
* @param detail 提示给用户的详情
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -160,6 +170,7 @@ public class ResultUtil implements BaseServiceType {
* 调用接口失败返回
*
* @param code 操作代码
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -167,6 +178,18 @@ public class ResultUtil implements BaseServiceType {
return createError(code, null);
}
+ /**
+ * 调用接口失败返回
+ *
+ * @param data 需要传输到客户端(浏览器)的数据
+ *
+ * @author Chen Wen
+ * @date 17:05 2022/6/28
+ */
+ public static ResultBody createError(Object data) {
+ return createSuccess(ERROR, null, null, data);
+ }
+
/**
* 调用接口失败返回
*
@@ -181,6 +204,7 @@ public class ResultUtil implements BaseServiceType {
* 调用接口失败返回
*
* @param msg 提示给用户的信息
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -193,6 +217,7 @@ public class ResultUtil implements BaseServiceType {
*
* @param code 操作代码
* @param msg 提示给用户的信息
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -205,6 +230,7 @@ public class ResultUtil implements BaseServiceType {
*
* @param msg 提示给用户的信息
* @param detail 提示给用户的详情
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -218,6 +244,7 @@ public class ResultUtil implements BaseServiceType {
* @param code 操作代码
* @param msg 提示给用户的信息
* @param detail 提示给用户的详情
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -231,6 +258,7 @@ public class ResultUtil implements BaseServiceType {
* @param msg 提示给用户的信息
* @param data 需要传输到客户端(浏览器)的数据
* @param detail 提示给用户的详情
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -245,6 +273,7 @@ public class ResultUtil implements BaseServiceType {
* @param msg 提示给用户的信息
* @param detail 提示给用户的详情
* @param data 需要传输到客户端(浏览器)的数据
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
@@ -260,6 +289,7 @@ public class ResultUtil implements BaseServiceType {
* @param detail 提示给用户的详情
* @param data 需要传输到客户端(浏览器)的数据
* @param lang 国际化语言代码
+ *
* @author Chen Wen
* @date 1:06 2022/1/5
*/
@@ -281,6 +311,7 @@ public class ResultUtil implements BaseServiceType {
* @param msg 提示给用户的信息
* @param detail 提示给用户的详情
* @param data 需要传输到客户端(浏览器)的数据
+ *
* @author 陈文
* @date 2020/8/16 2:10
*/
diff --git a/src/main/resources/i18n/baseServiceType.properties b/src/main/resources/i18n/baseServiceType.properties
new file mode 100644
index 0000000000000000000000000000000000000000..7c25861588c255341428e8c22475d2a11eca766b
--- /dev/null
+++ b/src/main/resources/i18n/baseServiceType.properties
@@ -0,0 +1,21 @@
+#\u901A\u7528
+code_0=\u64CD\u4F5C\u5931\u8D25
+code_1=\u64CD\u4F5C\u6210\u529F
+code_2=\u64CD\u4F5C\u6210\u529F(\u5E26\u6709\u4FE1\u606F)
+code_3=\u64CD\u4F5C\u6210\u529F(\u5E26\u6709\u8B66\u544A)
+code_100=\u975E\u6CD5\u64CD\u4F5C
+#\u5B89\u5168\u6846\u67B6
+code_1001=\u672A\u53D6\u5F97\u6388\u6743
+code_1002=\u672A\u767B\u5F55\u7528\u6237
+code_1003=\u7528\u6237\u4E0D\u5B58\u5728\u6216\u8005\u5BC6\u7801\u9519\u8BEF
+code_1004=\u7528\u6237\u8D26\u6237\u88AB\u9501\u5B9A
+code_1005=\u7528\u6237\u8D26\u6237\u7981\u7528
+code_1006=\u7528\u6237\u8D26\u6237\u5DF2\u8FC7\u671F
+code_1007=\u7528\u6237\u5BC6\u7801\u5DF2\u8FC7\u671F
+code_1008=\u7528\u6237\u4E0D\u5B58\u5728\u6216\u8005\u5BC6\u7801\u9519\u8BEF
+code_1099=\u5B89\u5168\u8BA4\u8BC1\u5931\u8D25
+code_1101=\u539F\u5BC6\u7801\u9519\u8BEF
+code_1102=\u65B0\u5BC6\u7801\u4E0D\u80FD\u548C\u65E7\u5BC6\u7801\u76F8\u540C
+code_1103=\u5BC6\u7801\u8FC7\u77ED\uFF0C\u81F3\u5C11\u9700\u8981{}\u4F4D
+code_1104=\u5BC6\u7801\u8FC7\u957F\uFF0C\u6700\u591A\u53EA\u80FD{}\u4F4D
+code_1105=\u5BC6\u7801\u590D\u6742\u5EA6\u8FC7\u4F4E
\ No newline at end of file
diff --git a/src/main/resources/i18n/baseServiceType_en_US.properties b/src/main/resources/i18n/baseServiceType_en_US.properties
new file mode 100644
index 0000000000000000000000000000000000000000..a0e8c378cee61a19bbc89d7985b77e5a7b6fcc1a
--- /dev/null
+++ b/src/main/resources/i18n/baseServiceType_en_US.properties
@@ -0,0 +1,21 @@
+#\u901A\u7528
+code_0=Failed operation
+code_1=Successful operation
+code_2=Operation is successful (with information)
+code_3=Operation is successful (with warning)
+code_100=Illegal operation
+#\u5B89\u5168\u6846\u67B6
+code_1001=Not authorized
+code_1002=Not logged in user
+code_1003=The user does not exist or the password is wrong
+code_1004=User account is locked
+code_1005=User account disabled
+code_1006=User account has expired
+code_1007=User password has expired
+code_1008=The user does not exist or the password is wrong
+code_1099=Security authentication failed
+code_1101=The original password is wrong
+code_1102=The new password cannot be the same as the old password
+code_1103=Password is too short\uFF0CAt least {} bits required
+code_1104=Password is too long\uFF0CNo more than {} digits
+code_1105=Password complexity is too low
\ No newline at end of file
diff --git a/src/main/resources/i18n/baseServiceType_ja_JP.properties b/src/main/resources/i18n/baseServiceType_ja_JP.properties
new file mode 100644
index 0000000000000000000000000000000000000000..5a9482c3085551118837684925c4f3af173005c4
--- /dev/null
+++ b/src/main/resources/i18n/baseServiceType_ja_JP.properties
@@ -0,0 +1,21 @@
+#\u901A\u7528
+code_0=\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F
+code_1=\u64CD\u4F5C\u304C\u6210\u529F\u3057\u307E\u3057\u305F
+code_2=\u64CD\u4F5C\u6210\u529F\uFF08\u60C5\u5831\u4ED8\u304D\uFF09
+code_3=\u64CD\u4F5C\u304C\u6210\u529F\u3057\u307E\u3057\u305F\uFF08\u8B66\u544A\u4ED8\u304D\uFF09
+code_100=\u4E0D\u6B63\u306A\u64CD\u4F5C
+#\u5B89\u5168\u6846\u67B6
+code_1001=\u6A29\u9650\u3092\u53D6\u5F97\u3057\u3066\u3044\u307E\u305B\u3093
+code_1002=\u30E6\u30FC\u30B6\u30FC\u304C\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u307E\u305B\u3093
+code_1003=\u30E6\u30FC\u30B6\u30FC\u304C\u5B58\u5728\u3057\u306A\u3044\u304B\u30D1\u30B9\u30EF\u30FC\u30C9\u30A8\u30E9\u30FC
+code_1004=\u30E6\u30FC\u30B6\u30FC\u30A2\u30AB\u30A6\u30F3\u30C8\u304C\u30ED\u30C3\u30AF\u3055\u308C\u307E\u3057\u305F
+code_1005=\u30E6\u30FC\u30B6\u30FC\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u7121\u52B9\u5316
+code_1006=\u30E6\u30FC\u30B6\u30FC\u30A2\u30AB\u30A6\u30F3\u30C8\u304C\u671F\u9650\u5207\u308C\u306B\u306A\u308A\u307E\u3057\u305F
+code_1007=\u30E6\u30FC\u30B6\u30FC\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u671F\u9650\u5207\u308C\u3067\u3059
+code_1008=\u30E6\u30FC\u30B6\u30FC\u304C\u5B58\u5728\u3057\u306A\u3044\u304B\u30D1\u30B9\u30EF\u30FC\u30C9\u30A8\u30E9\u30FC
+code_1099=\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F
+code_1101=\u5143\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u9593\u9055\u3063\u3066\u3044\u307E\u3059
+code_1102=\u65B0\u3057\u3044\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u53E4\u3044\u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u540C\u3058\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093
+code_1103=\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u77ED\u3059\u304E\u3066\u3001\u5C11\u306A\u304F\u3068\u3082{}\u30D3\u30C3\u30C8\u304C\u5FC5\u8981\u3067\u3059
+code_1104=\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u9577\u3059\u304E\u3066\u3001\u6700\u5927{}\u30D3\u30C3\u30C8\u3057\u304B\u3042\u308A\u307E\u305B\u3093
+code_1105=\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u8907\u96D1\u3055\u304C\u4F4E\u3059\u304E\u308B
\ No newline at end of file
diff --git a/src/main/resources/i18n/baseServiceType_zh_CN.properties b/src/main/resources/i18n/baseServiceType_zh_CN.properties
new file mode 100644
index 0000000000000000000000000000000000000000..7c25861588c255341428e8c22475d2a11eca766b
--- /dev/null
+++ b/src/main/resources/i18n/baseServiceType_zh_CN.properties
@@ -0,0 +1,21 @@
+#\u901A\u7528
+code_0=\u64CD\u4F5C\u5931\u8D25
+code_1=\u64CD\u4F5C\u6210\u529F
+code_2=\u64CD\u4F5C\u6210\u529F(\u5E26\u6709\u4FE1\u606F)
+code_3=\u64CD\u4F5C\u6210\u529F(\u5E26\u6709\u8B66\u544A)
+code_100=\u975E\u6CD5\u64CD\u4F5C
+#\u5B89\u5168\u6846\u67B6
+code_1001=\u672A\u53D6\u5F97\u6388\u6743
+code_1002=\u672A\u767B\u5F55\u7528\u6237
+code_1003=\u7528\u6237\u4E0D\u5B58\u5728\u6216\u8005\u5BC6\u7801\u9519\u8BEF
+code_1004=\u7528\u6237\u8D26\u6237\u88AB\u9501\u5B9A
+code_1005=\u7528\u6237\u8D26\u6237\u7981\u7528
+code_1006=\u7528\u6237\u8D26\u6237\u5DF2\u8FC7\u671F
+code_1007=\u7528\u6237\u5BC6\u7801\u5DF2\u8FC7\u671F
+code_1008=\u7528\u6237\u4E0D\u5B58\u5728\u6216\u8005\u5BC6\u7801\u9519\u8BEF
+code_1099=\u5B89\u5168\u8BA4\u8BC1\u5931\u8D25
+code_1101=\u539F\u5BC6\u7801\u9519\u8BEF
+code_1102=\u65B0\u5BC6\u7801\u4E0D\u80FD\u548C\u65E7\u5BC6\u7801\u76F8\u540C
+code_1103=\u5BC6\u7801\u8FC7\u77ED\uFF0C\u81F3\u5C11\u9700\u8981{}\u4F4D
+code_1104=\u5BC6\u7801\u8FC7\u957F\uFF0C\u6700\u591A\u53EA\u80FD{}\u4F4D
+code_1105=\u5BC6\u7801\u590D\u6742\u5EA6\u8FC7\u4F4E
\ No newline at end of file