list = new ArrayList<>();
+
+ for (ObjectError error : bindingResult.getAllErrors()) {
+ list.add(error.getDefaultMessage());
+ }
+ /* TODO: 此处只是暂时写做500后续待定*/
+ return ResponseMsg.wrapperFailResult(500, list,ResponseMsg.ExceptionType.BUS_EXCEPTION);
+ }
+
+}
diff --git a/keller-public/src/main/java/com/cheri/keller/pub/exception/handler/UnifiedMessageSource.java b/keller-public/src/main/java/com/cheri/keller/pub/exception/handler/UnifiedMessageSource.java
new file mode 100644
index 0000000000000000000000000000000000000000..239b7d40db58b6d0479c8103a98c42be305cc564
--- /dev/null
+++ b/keller-public/src/main/java/com/cheri/keller/pub/exception/handler/UnifiedMessageSource.java
@@ -0,0 +1,51 @@
+package com.cheri.keller.pub.exception.handler;
+
+
+import org.springframework.context.MessageSource;
+import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Locale;
+
+@Service
+public class UnifiedMessageSource {
+
+
+ @Resource
+ private MessageSource messageSource;
+
+ /**
+ * 获取国际化消息
+ * @param code 消息code
+ * @return
+ */
+ public String getMessage(String code) {
+
+ return getMessage(code, null);
+ }
+
+ /**
+ * 获取国际化消息
+ * @param code 消息code
+ * @param args 参数
+ * @return
+ */
+ public String getMessage(String code, Object[] args) {
+
+ return getMessage(code, args, "");
+ }
+
+ /**
+ * 获取国际化消息
+ * @param code 消息code
+ * @param args 参数
+ * @param defaultMessage 默认消息
+ * @return
+ */
+ public String getMessage(String code, Object[] args, String defaultMessage) {
+ Locale locale = LocaleContextHolder.getLocale();
+
+ return messageSource.getMessage(code, args, defaultMessage, locale);
+ }
+}
\ No newline at end of file
diff --git a/keller-public/src/main/java/com/cheri/keller/pub/judge/Assert.java b/keller-public/src/main/java/com/cheri/keller/pub/judge/Assert.java
new file mode 100644
index 0000000000000000000000000000000000000000..5725ca4b1b5cc305fb829fdd35dcccdfe7fe269b
--- /dev/null
+++ b/keller-public/src/main/java/com/cheri/keller/pub/judge/Assert.java
@@ -0,0 +1,296 @@
+package com.cheri.keller.pub.judge;
+
+import com.cheri.keller.pub.exception.BaseException;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * @author ouka
+ * @ClassName Assert
+ * @Package com.cheri.keller.pub.judge
+ * @Description: 断言判断
+ * @date 2020/6/4 15:54
+ */
+public interface Assert {
+ /**
+ * 创建异常
+ * @param args
+ * @return
+ */
+ BaseException newException(Object... args);
+
+ /**
+ * 创建异常
+ * @param t
+ * @param args
+ * @return
+ */
+ BaseException newException(Throwable t, Object... args);
+
+ /**
+ * 断言对象obj
非空。如果对象obj
为空,则抛出异常
+ *
+ * @param obj 待判断对象
+ */
+ default void assertNotNull(Object obj) {
+ if (obj == null) {
+ throw newException();
+ }
+ }
+
+ /**
+ *
断言对象obj
非空。如果对象obj
为空,则抛出异常
+ *
异常信息message
支持传递参数方式,避免在判断之前进行字符串拼接操作
+ *
+ * @param obj 待判断对象
+ * @param args message占位符对应的参数列表
+ */
+ default void assertNotNull(Object obj, Object... args) {
+ if (obj == null) {
+ throw newException(args);
+ }
+ }
+
+ /**
+ *
断言字符串str
不为空串(长度为0)。如果字符串str
为空串,则抛出异常
+ *
+ * @param str 待判断字符串
+ */
+ default void assertNotEmpty(String str) {
+ if (null == str || "".equals(str.trim())) {
+ throw newException();
+ }
+ }
+
+ /**
+ *
断言字符串str
不为空串(长度为0)。如果字符串str
为空串,则抛出异常
+ *
异常信息message
支持传递参数方式,避免在判断之前进行字符串拼接操作
+ *
+ * @param str 待判断字符串
+ * @param args message占位符对应的参数列表
+ */
+ default void assertNotEmpty(String str, Object... args) {
+ if (str == null || "".equals(str.trim())) {
+ throw newException(args);
+ }
+ }
+
+ /**
+ *
断言数组arrays
大小不为0。如果数组arrays
大小不为0,则抛出异常
+ *
+ * @param arrays 待判断数组
+ */
+ default void assertNotEmpty(Object[] arrays) {
+ if (arrays == null || arrays.length == 0) {
+ throw newException();
+ }
+ }
+
+ /**
+ *
断言数组arrays
大小不为0。如果数组arrays
大小不为0,则抛出异常
+ *
异常信息message
支持传递参数方式,避免在判断之前进行字符串拼接操作
+ *
+ * @param arrays 待判断数组
+ * @param args message占位符对应的参数列表
+ */
+ default void assertNotEmpty(Object[] arrays, Object... args) {
+ if (arrays == null || arrays.length == 0) {
+ throw newException(args);
+ }
+ }
+
+ /**
+ *
断言集合c
大小不为0。如果集合c
大小不为0,则抛出异常
+ *
+ * @param c 待判断数组
+ */
+ default void assertNotEmpty(Collection> c) {
+ if (c == null || c.isEmpty()) {
+ throw newException();
+ }
+ }
+
+ /**
+ *
断言集合c
大小不为0。如果集合c
大小不为0,则抛出异常
+ *
+ * @param c 待判断数组
+ * @param args message占位符对应的参数列表
+ */
+ default void assertNotEmpty(Collection> c, Object... args) {
+ if (c == null || c.isEmpty()) {
+ throw newException(args);
+ }
+ }
+
+ /**
+ *
断言Mapmap
大小不为0。如果Mapmap
大小不为0,则抛出异常
+ *
+ * @param map 待判断Map
+ */
+ default void assertNotEmpty(Map, ?> map) {
+ if (map == null || map.isEmpty()) {
+ throw newException();
+ }
+ }
+
+ /**
+ *
断言Mapmap
大小不为0。如果Mapmap
大小不为0,则抛出异常
+ *
+ * @param map 待判断Map
+ * @param args message占位符对应的参数列表
+ */
+ default void assertNotEmpty(Map, ?> map, Object... args) {
+ if (map == null || map.isEmpty()) {
+ throw newException(args);
+ }
+ }
+
+ /**
+ *
断言布尔值expression
为false。如果布尔值expression
为true,则抛出异常
+ *
+ * @param expression 待判断布尔变量
+ */
+ default void assertIsFalse(boolean expression) {
+ if (expression) {
+ throw newException();
+ }
+ }
+
+ /**
+ *
断言布尔值expression
为false。如果布尔值expression
为true,则抛出异常
+ *
+ * @param expression 待判断布尔变量
+ * @param args message占位符对应的参数列表
+ */
+ default void assertIsFalse(boolean expression, Object... args) {
+ if (expression) {
+ throw newException(args);
+ }
+ }
+
+ /**
+ *
断言布尔值expression
为true。如果布尔值expression
为false,则抛出异常
+ *
+ * @param expression 待判断布尔变量
+ */
+ default void assertIsTrue(boolean expression) {
+ if (!expression) {
+ throw newException();
+ }
+ }
+
+ /**
+ *
断言布尔值expression
为true。如果布尔值expression
为false,则抛出异常
+ *
+ * @param expression 待判断布尔变量
+ * @param args message占位符对应的参数列表
+ */
+ default void assertIsTrue(boolean expression, Object... args) {
+ if (!expression) {
+ throw newException(args);
+ }
+ }
+
+ /**
+ *
断言对象obj
为null
。如果对象obj
不为null
,则抛出异常
+ *
+ * @param obj 待判断对象
+ */
+ default void assertIsNull(Object obj) {
+ if (obj != null) {
+ throw newException();
+ }
+ }
+
+ /**
+ *
断言对象obj
为null
。如果对象obj
不为null
,则抛出异常
+ *
+ * @param obj 待判断布尔变量
+ * @param args message占位符对应的参数列表
+ */
+ default void assertIsNull(Object obj, Object... args) {
+ if (obj != null) {
+ throw newException(args);
+ }
+ }
+
+ /**
+ *
直接抛出异常
+ *
+ */
+ default void assertFail() {
+ throw newException();
+ }
+
+ /**
+ *
直接抛出异常
+ *
+ * @param args message占位符对应的参数列表
+ */
+ default void assertFail(Object... args) {
+ throw newException(args);
+ }
+
+ /**
+ *
直接抛出异常,并包含原异常信息
+ *
当捕获非运行时异常(非继承{@link RuntimeException})时,并该异常进行业务描述时,
+ * 必须传递原始异常,作为新异常的cause
+ *
+ * @param t 原始异常
+ */
+ default void assertFail(Throwable t) {
+ throw newException(t);
+ }
+
+ /**
+ *
直接抛出异常,并包含原异常信息
+ *
当捕获非运行时异常(非继承{@link RuntimeException})时,并该异常进行业务描述时,
+ * 必须传递原始异常,作为新异常的cause
+ *
+ * @param t 原始异常
+ * @param args message占位符对应的参数列表
+ */
+ default void assertFail(Throwable t, Object... args) {
+ throw newException(t, args);
+ }
+
+ /**
+ *
断言对象o1
与对象o2
相等,此处的相等指(o1.equals(o2)为true)。
+ * 如果两对象不相等,则抛出异常
+ *
+ * @param o1 待判断对象,若o1
为null,也当作不相等处理
+ * @param o2 待判断对象
+ */
+ default void assertEquals(Object o1, Object o2) {
+ if (o1 == o2) {
+ return;
+ }
+ if (o1 == null) {
+ throw newException();
+ }
+ if (!o1.equals(o2)) {
+ throw newException();
+ }
+ }
+
+ /**
+ *
断言对象o1
与对象o2
相等,此处的相等指(o1.equals(o2)为true)。
+ * 如果两对象不相等,则抛出异常
+ *
+ * @param o1 待判断对象,若o1
为null,也当作不相等处理
+ * @param o2 待判断对象
+ * @param args message占位符对应的参数列表
+ */
+ default void assertEquals(Object o1, Object o2, Object... args) {
+ if (o1 == o2) {
+ return;
+ }
+ if (o1 == null) {
+ throw newException(args);
+ }
+ if (!o1.equals(o2)) {
+ throw newException(args);
+ }
+ }
+}
diff --git a/keller-public/src/main/java/com/cheri/keller/pub/judge/IResponseEnum.java b/keller-public/src/main/java/com/cheri/keller/pub/judge/IResponseEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..473c637e874b88327fcce0468cb441a100cc715f
--- /dev/null
+++ b/keller-public/src/main/java/com/cheri/keller/pub/judge/IResponseEnum.java
@@ -0,0 +1,22 @@
+package com.cheri.keller.pub.judge;
+
+import org.hibernate.type.IntegerType;
+
+/**
+ * @author ouka
+ * @ClassName IResponseEnum
+ * @Package com.cheri.keller.pub.judge
+ * @Description: 异常信息响应接口
+ * @date 2020/6/4 15:56
+ */
+public interface IResponseEnum {
+ /**
+ * @return 响应码
+ */
+ Integer getCode();
+
+ /**
+ * @return 响应信息
+ */
+ String getMsg();
+}
diff --git a/keller-public/src/main/java/com/cheri/keller/pub/judge/ServerErrorExceptionAssert.java b/keller-public/src/main/java/com/cheri/keller/pub/judge/ServerErrorExceptionAssert.java
new file mode 100644
index 0000000000000000000000000000000000000000..135d94d0ffc08bb56f960e1b3e3eaf3403f6f0ea
--- /dev/null
+++ b/keller-public/src/main/java/com/cheri/keller/pub/judge/ServerErrorExceptionAssert.java
@@ -0,0 +1,31 @@
+package com.cheri.keller.pub.judge;
+
+import com.cheri.keller.pub.exception.BaseException;
+import com.cheri.keller.pub.exception.ServerException;
+import lombok.extern.java.Log;
+import lombok.extern.log4j.Log4j2;
+
+import java.text.MessageFormat;
+
+/**
+ * @author ouka
+ * @ClassName ServerErrorException
+ * @Package com.cheri.keller.pub.judge
+ * @Description: TODO
+ * @date 2020/6/4 16:11
+ */
+public interface ServerErrorExceptionAssert extends Assert,IResponseEnum{
+ @Override
+ default BaseException newException(Object... args){
+ String msg = MessageFormat.format(this.getMsg(), args);
+
+ return new ServerException(this, args, msg);
+ }
+
+ @Override
+ default BaseException newException(Throwable t, Object... args){
+ String msg = MessageFormat.format(this.getMsg(), args);
+
+ return new ServerException(this, args, msg, t);
+ }
+}
diff --git a/keller-public/src/main/java/com/cheri/keller/pub/response/CommonResponseEnum.java b/keller-public/src/main/java/com/cheri/keller/pub/response/CommonResponseEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..f79181091b9e26f6bfe797dacd81267a6095333d
--- /dev/null
+++ b/keller-public/src/main/java/com/cheri/keller/pub/response/CommonResponseEnum.java
@@ -0,0 +1,65 @@
+package com.cheri.keller.pub.response;
+
+
+import com.cheri.keller.pub.exception.BaseException;
+import com.cheri.keller.pub.judge.ServerErrorExceptionAssert;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author ouka
+ * @ClassName ResponseMsg
+ * @Package com.cheri.keller.pub.response
+ * @Description: 异常响应
+ * @date 2020/6/4 15:59
+ */
+@AllArgsConstructor
+public enum CommonResponseEnum implements ServerErrorExceptionAssert {
+ ERROR(500,"错误"),
+ /**
+ * 成功
+ */
+ SUCCESS(0, "SUCCESS"),
+ /**
+ * 服务器繁忙,请稍后重试
+ */
+ SERVER_BUSY(9998, "服务器繁忙"),
+ /**
+ * 服务器异常,无法识别的异常,尽可能对通过判断减少未定义异常抛出
+ */
+ SERVER_ERROR(9999, "网络异常"),
+
+
+ // Time
+ DATE_NOT_NULL(5001, "日期不能为空"),
+ DATETIME_NOT_NULL(5001, "时间不能为空"),
+ TIME_NOT_NULL(5001, "时间不能为空"),
+ DATE_PATTERN_MISMATCH(5002, "日期[%s]与格式[%s]不匹配,无法解析"),
+ PATTERN_NOT_NULL(5003, "日期格式不能为空"),
+ PATTERN_INVALID(5003, "日期格式[%s]无法识别"),
+ ;
+
+ /**
+ * 返回码
+ */
+ private int code;
+ /**
+ * 返回消息
+ */
+ private String message;
+
+
+ @Override
+ public Integer getCode() {
+ return code;
+ }
+
+ @Override
+ public String getMsg() {
+ return message;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+}
diff --git a/keller-public/src/main/java/com/cheri/keller/pub/response/ResponseMsg.java b/keller-public/src/main/java/com/cheri/keller/pub/response/ResponseMsg.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5adf0d7fce0a5fb3ee8a50088e286eb22aadeb1
--- /dev/null
+++ b/keller-public/src/main/java/com/cheri/keller/pub/response/ResponseMsg.java
@@ -0,0 +1,71 @@
+package com.cheri.keller.pub.response;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Builder;
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+/**
+ * @author ouka
+ * @ClassName ResponseMsg
+ * @Package com.cheri.keller.pub.response
+ * @Description: 返回信息实体类
+ * @date 2020/6/4 15:58
+ */
+@Data
+@Builder
+@ToString
+public class ResponseMsg implements Serializable {
+ public enum ExceptionType {
+ SYS_EXCEPTION,
+ BUS_EXCEPTION
+ }
+
+ private static final Integer DEFAULT_BUSSUCESS_HTTPCODE = 200;
+ private static final Integer DEFAULT_BUSFAIL_HTTPCODE = 400;
+ private static final Integer DEFAULT_SYSFAIL_HTTPCODE = 500;
+ private static final Integer DEFAULT_SUCESS_CODE = 200;
+ private static final Integer DEFAULT_FAIL_CODE = 500;
+ private static final String DEFAULT_SUCESS_MSG = "成功";
+ private static final String DEFAULT_FAIL_MSG = "失败";
+ private Integer code;
+ private T data;
+ private DOMAIN msg;
+ @JsonIgnore
+ private Integer httpStatus;
+
+ /**
+ * 成功返回
+ *
+ * @param data 数据
+ * @param msg 提示 缺省值为 成功
+ * @param 数据类型
+ * @return 返回结果
+ */
+ public static ResponseMsg wrapperBusSuccessResult(T data, DOMAIN msg) {
+ if (null == msg) {
+ return ResponseMsg.builder().code(DEFAULT_SUCESS_CODE).msg(DEFAULT_SUCESS_MSG).data(data).httpStatus(DEFAULT_BUSSUCESS_HTTPCODE).build();
+ }
+ return ResponseMsg.builder().code(DEFAULT_SUCESS_CODE).msg(msg).data(data).httpStatus(DEFAULT_BUSSUCESS_HTTPCODE).build();
+ }
+
+ /**
+ * 失败返回
+ *
+ * @param code 状态码 缺省值为 200
+ * @param msg 提示信息 缺省值为 失败
+ * @return 返回结果
+ */
+ public static ResponseMsg wrapperFailResult(Integer code, DOMAIN msg, ExceptionType type) {
+ if (null == code) {
+ return ResponseMsg.builder().code(DEFAULT_FAIL_CODE).msg(msg).httpStatus(type == ExceptionType.SYS_EXCEPTION ? DEFAULT_SYSFAIL_HTTPCODE : DEFAULT_BUSFAIL_HTTPCODE).build();
+ }
+ if (null == msg) {
+ return ResponseMsg.builder().code(code).msg(DEFAULT_FAIL_MSG).httpStatus(type == ExceptionType.SYS_EXCEPTION ? DEFAULT_SYSFAIL_HTTPCODE : DEFAULT_BUSFAIL_HTTPCODE).build();
+ }
+ return ResponseMsg.builder().code(code).msg(msg).httpStatus(type == ExceptionType.SYS_EXCEPTION ? DEFAULT_SYSFAIL_HTTPCODE : DEFAULT_BUSFAIL_HTTPCODE).build();
+ }
+
+}
diff --git a/keller-public/src/main/java/com/cheri/keller/pub/response/ServletResponseEnum.java b/keller-public/src/main/java/com/cheri/keller/pub/response/ServletResponseEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..1cc1f528f860043b53934d4e35c50b93df8820fd
--- /dev/null
+++ b/keller-public/src/main/java/com/cheri/keller/pub/response/ServletResponseEnum.java
@@ -0,0 +1,49 @@
+package com.cheri.keller.pub.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author ouka
+ * @ClassName ServletResponseEnum
+ * @Package com.cheri.keller.pub.response
+ * @Description: ServletResponseEnum
+ * @date 2020/6/4 15:58
+ */
+@Getter
+@AllArgsConstructor
+public enum ServletResponseEnum {
+ MethodArgumentNotValidException(4400, "", HttpServletResponse.SC_BAD_REQUEST),
+ MethodArgumentTypeMismatchException(4400, "", HttpServletResponse.SC_BAD_REQUEST),
+ MissingServletRequestPartException(4400, "", HttpServletResponse.SC_BAD_REQUEST),
+ MissingPathVariableException(4400, "", HttpServletResponse.SC_BAD_REQUEST),
+ BindException(4400, "", HttpServletResponse.SC_BAD_REQUEST),
+ MissingServletRequestParameterException(4400, "", HttpServletResponse.SC_BAD_REQUEST),
+ TypeMismatchException(4400, "", HttpServletResponse.SC_BAD_REQUEST),
+ ServletRequestBindingException(4400, "", HttpServletResponse.SC_BAD_REQUEST),
+ HttpMessageNotReadableException(4400, "", HttpServletResponse.SC_BAD_REQUEST),
+ NoHandlerFoundException(4404, "", HttpServletResponse.SC_NOT_FOUND),
+ NoSuchRequestHandlingMethodException(4404, "", HttpServletResponse.SC_NOT_FOUND),
+ HttpRequestMethodNotSupportedException(4405, "", HttpServletResponse.SC_METHOD_NOT_ALLOWED),
+ HttpMediaTypeNotAcceptableException(4406, "", HttpServletResponse.SC_NOT_ACCEPTABLE),
+ HttpMediaTypeNotSupportedException(4415, "", HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE),
+ ConversionNotSupportedException(4500, "", HttpServletResponse.SC_INTERNAL_SERVER_ERROR),
+ HttpMessageNotWritableException(4500, "", HttpServletResponse.SC_INTERNAL_SERVER_ERROR),
+ AsyncRequestTimeoutException(4503, "", HttpServletResponse.SC_SERVICE_UNAVAILABLE)
+ ;
+
+ /**
+ * 返回码,目前与{@link #statusCode}相同
+ */
+ private int code;
+ /**
+ * 返回信息,直接读取异常的message
+ */
+ private String message;
+ /**
+ * HTTP状态码
+ */
+ private int statusCode;
+}
diff --git a/keller-public/src/main/java/com/cheri/keller/pub/unifiedreruen/IgnoreUnified.java b/keller-public/src/main/java/com/cheri/keller/pub/unifiedreruen/IgnoreUnified.java
new file mode 100644
index 0000000000000000000000000000000000000000..227968eb8ae8cc2e8e287549d2bd77b6b2066af0
--- /dev/null
+++ b/keller-public/src/main/java/com/cheri/keller/pub/unifiedreruen/IgnoreUnified.java
@@ -0,0 +1,18 @@
+package com.cheri.keller.pub.unifiedreruen;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author ouka
+ * @ClassName IgnoreUnified
+ * @Package com.cheri.keller.pub.unifiedreruen
+ * @Description: 忽略统一返回的注解
+ * @date 2020/6/4 16:35
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface IgnoreUnified {
+}
diff --git a/keller-public/src/main/java/com/cheri/keller/pub/unifiedreruen/ReturnAdvice.java b/keller-public/src/main/java/com/cheri/keller/pub/unifiedreruen/ReturnAdvice.java
new file mode 100644
index 0000000000000000000000000000000000000000..247d2aa3697f2547cb3b6120d1a788fd2bdc8c70
--- /dev/null
+++ b/keller-public/src/main/java/com/cheri/keller/pub/unifiedreruen/ReturnAdvice.java
@@ -0,0 +1,42 @@
+package com.cheri.keller.pub.unifiedreruen;
+
+import com.cheri.keller.pub.response.ResponseMsg;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServerHttpResponse;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
+
+import java.util.Objects;
+
+/**
+ * @author ouka
+ * @ClassName ReturnAdvice
+ * @Package com.cheri.keller.pub.unifiedreruen
+ * @Description: 统一返回
+ * @date 2020/6/4 16:09
+ */
+@RestControllerAdvice
+public class ReturnAdvice implements ResponseBodyAdvice {
+ private static final String API_PACKAGE_END_STR = ".api";
+ private static final String EXCEPTION_HANDLER_PACKAGE_END_STR = ".exception.api";
+
+ @Override
+ public boolean supports(MethodParameter returnType, Class converterType) {
+ IgnoreUnified annotation = returnType.getExecutable().getDeclaredAnnotation(IgnoreUnified.class);
+ return (returnType.getContainingClass().getPackage().getName().endsWith(API_PACKAGE_END_STR) ||
+ returnType.getContainingClass().getPackage().getName().endsWith(EXCEPTION_HANDLER_PACKAGE_END_STR))
+ && Objects.isNull(annotation);
+ }
+
+ @Override
+ public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
+ if (body instanceof ResponseMsg) {
+ return body;
+ } else {
+ ResponseMsg resultMsg = ResponseMsg.wrapperBusSuccessResult(body, null);
+ return resultMsg;
+ }
+ }
+}
diff --git a/keller-public/src/main/java/com/cheri/keller/pub/util/json/GsonUtil.java b/keller-public/src/main/java/com/cheri/keller/pub/util/json/GsonUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..dd6e81d34d39409772b71786fdbf57d000a7dd68
--- /dev/null
+++ b/keller-public/src/main/java/com/cheri/keller/pub/util/json/GsonUtil.java
@@ -0,0 +1,111 @@
+package com.cheri.keller.pub.util.json;
+
+import com.google.gson.*;
+import com.google.gson.reflect.TypeToken;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author ouka
+ * @ClassName GsonUtils
+ * @Package com.cheri.keller.pub.util.json
+ * @Description: gson
+ * @date 2020/6/4 16:42
+ */
+public class GsonUtil {
+ private static Gson gson = null;
+
+ static {
+ if (gson == null) {
+ gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
+ }
+ }
+
+ //无参的私有构造方法
+ private GsonUtil() {
+ }
+
+ /**
+ * 将对象转成json格式
+ *
+ * @param object
+ * @return String
+ */
+ public static String GsonString(Object object) {
+ String gsonString = null;
+ if (gson != null) {
+ gsonString = gson.toJson(object);
+ }
+ return gsonString;
+ }
+
+ /**
+ * 将json转成特定的cls的对象
+ *
+ * @param gsonString
+ * @param cls
+ * @return
+ */
+ public static T GsonToBean(String gsonString, Class cls) {
+ T t = null;
+ if (gson != null) {
+ //传入json对象和对象类型,将json转成对象
+ t = gson.fromJson(gsonString, cls);
+ }
+ return t;
+ }
+
+ /**
+ * json字符串转成list
+ *
+ * @param gsonString
+ * @param cls
+ * @return
+ */
+ public static List GsonToList(String gsonString, Class cls) {
+ List list = null;
+ if (gson != null) {
+ //根据泛型返回解析指定的类型,TypeToken>{}.getType()获取返回类型
+ list = gson.fromJson(gsonString, new TypeToken>() {
+ }.getType());
+ }
+ return list;
+ }
+
+ public static List jsonToList(String json, Class cls) {
+ ArrayList mList = new ArrayList();
+ JsonArray array = new JsonParser().parse(json).getAsJsonArray();
+ for (final JsonElement elem : array) {
+ mList.add(gson.fromJson(elem, cls));
+ }
+ return mList;
+ }
+
+ public static List