diff --git a/.flattened-pom.xml b/.flattened-pom.xml deleted file mode 100644 index c14d3bc..0000000 --- a/.flattened-pom.xml +++ /dev/null @@ -1,176 +0,0 @@ - - - 4.0.0 - com.jy - xiaoyishu - 0.0.1-SNAPSHOT - pom - ${project.artifactId} - 小壹书(仿小红书),基于 Spring Cloud Alibaba 微服务架构 - - xiaoyi-auth - xiaoyi-framework - - - 17 - ${java.version} - 3.8.1 - 8.0.29 - 3.5.5 - 2.16.1 - 3.0.2 - 1.5.0 - 2022.0.0.0 - 0.0.1-SNAPSHOT - 2022.0.0 - 1.18.30 - ${java.version} - UTF-8 - 1.2.21 - - - - - com.jy - xiaoyi-common - 0.0.1-SNAPSHOT - - - com.jy - xiaoyi-spring-boot-starter-biz-operationlog - 0.0.1-SNAPSHOT - - - com.jy - xiaoyi-spring-boot-starter-jackson - 0.0.1-SNAPSHOT - - - org.springframework.boot - spring-boot-dependencies - ${spring-boot.version} - pom - import - - - com.alibaba.cloud - spring-cloud-alibaba-dependencies - ${spring-cloud-alibaba.version} - pom - import - - - org.springframework.cloud - spring-cloud-dependencies - ${spring-cloud.version} - pom - import - - - org.projectlombok - lombok - ${lombok.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-core - ${jackson.version} - - - com.baomidou - mybatis-plus-boot-starter - ${mybatis-plus.version} - - - mysql - mysql-connector-java - ${mysql-connector-java.version} - - - com.alibaba - druid-spring-boot-3-starter - ${druid.version} - - - - - - huaweicloud - huawei - https://mirrors.huaweicloud.com/repository/maven/ - - - aliyunmaven - aliyun - https://maven.aliyun.com/repository/public - - - - - - - org.springframework.boot - spring-boot-maven-plugin - ${spring-boot.version} - - - repackage - - repackage - - - - - - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${java.version} - ${java.version} - ${project.build.sourceEncoding} - - - org.projectlombok - lombok - ${lombok.version} - - - - - - - - - org.codehaus.mojo - flatten-maven-plugin - ${flatten-maven-plugin.version} - - - flatten - process-resources - - flatten - - - - flatten.clean - clean - - clean - - - - - resolveCiFriendliesOnly - true - - - - - diff --git a/.vscode/settings.json b/.vscode/settings.json index 5bf7b4b..792af47 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,10 +1,11 @@ { - "maven.executable.options": "-s D:\\Programs\\Dev\\maven\\conf\\settings-aliyun.xml", + "maven.executable.options": "-s D:\\Programs\\Dev\\maven\\conf\\settings-aliyun.xml -DskipTests", "java.format.settings.url": ".vscode/java-formatter.xml", "java.compile.nullAnalysis.mode": "automatic", "java.configuration.updateBuildConfiguration": "automatic", "[java]": { "editor.tabSize": 4 }, - "maven.executable.path": "D:\\Programs\\Dev\\maven\\bin\\mvn.cmd" + "maven.executable.path": "D:\\Programs\\Dev\\maven\\bin\\mvn.cmd", + "maven.view": "hierarchical" } diff --git a/t b/t deleted file mode 100644 index e69de29..0000000 diff --git a/xiaoyi-auth/.flattened-pom.xml b/xiaoyi-auth/.flattened-pom.xml deleted file mode 100644 index 3dbbe9e..0000000 --- a/xiaoyi-auth/.flattened-pom.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - 4.0.0 - - com.jy - xiaoyishu - 0.0.1-SNAPSHOT - - com.jy - xiaoyi-auth - 0.0.1-SNAPSHOT - ${project.artifactId} - 小壹书:认证服务(负责处理用户登录、注册、账号注销等) - - - com.jy - xiaoyi-common - - - com.jy - xiaoyi-spring-boot-starter-biz-operationlog - - - com.jy - xiaoyi-spring-boot-starter-jackson - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-test - test - - - com.baomidou - mybatis-plus-boot-starter - - - mysql - mysql-connector-java - - - com.alibaba - druid-spring-boot-3-starter - - - - - - false - src/main/java - - **/*.xml - - - - src/main/resources - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/config/RedisTemplateConfig.java b/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/config/RedisTemplateConfig.java index ad96868..121b9ce 100644 --- a/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/config/RedisTemplateConfig.java +++ b/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/config/RedisTemplateConfig.java @@ -6,6 +6,7 @@ import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.lang.NonNull; /** * @@ -20,7 +21,7 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; public class RedisTemplateConfig { @Bean - public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { + public RedisTemplate redisTemplate(@NonNull RedisConnectionFactory connectionFactory) { RedisTemplate redisTemplate = new RedisTemplate<>(); // 设置 RedisTemplate 的连接工厂 redisTemplate.setConnectionFactory(connectionFactory); diff --git a/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/controller/TestController.java b/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/controller/TestController.java index ebef87b..747b9e4 100644 --- a/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/controller/TestController.java +++ b/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/controller/TestController.java @@ -1,5 +1,6 @@ package com.jy.xiaoyishu.auth.controller; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -32,7 +33,8 @@ public class TestController { @PostMapping("/test2") @ApiOperationLog(description = "测试接口2") - public Response test2(@RequestBody User user) { + public Response test2(@RequestBody @Validated User user) { + // int i = 1 / 0; return Response.success(user); } diff --git a/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/enums/ResponseCodeEnum.java b/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/enums/ResponseCodeEnum.java new file mode 100644 index 0000000..e6b6096 --- /dev/null +++ b/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/enums/ResponseCodeEnum.java @@ -0,0 +1,31 @@ +package com.jy.xiaoyishu.auth.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import java.lang.String; + +import com.jy.framework.common.exception.BaseExceptionInterface; + +/** + * + * @author ayi + * @version V1.0 + * @title ResponseCodeEnum + * @description 响应码枚举类 + * @date 2026/01/15 14:37 + */ +@Getter +@AllArgsConstructor +public enum ResponseCodeEnum implements BaseExceptionInterface { + // -------- 通用异常状态码 -------- + SYSTEM_ERROR("AUTH-10000", "系统错误"), PARAM_NOT_VALID("AUTH-10001", "参数错误"); + + /** + * 错误码 + */ + private final String errorCode; + /** + * 错误信息 + */ + private final String errorMessage; +} diff --git a/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/exception/GlobalExceptionHandler.java b/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..34111b1 --- /dev/null +++ b/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/exception/GlobalExceptionHandler.java @@ -0,0 +1,85 @@ +package com.jy.xiaoyishu.auth.exception; + +import java.util.Optional; + +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.jy.framework.common.exception.BizException; +import com.jy.framework.common.response.Response; +import com.jy.xiaoyishu.auth.enums.ResponseCodeEnum; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 捕获自定义业务异常 + * + * @param request 请求 + * @param e 异常 + * @return 响应结果 + */ + @ExceptionHandler({BizException.class}) + @ResponseBody + public Response handleBizException(HttpServletRequest request, BizException e) { + log.warn("{} request failure, errorCode: {}, errorMessage: {}", request.getRequestURI(), e.getErrorCode(), + e.getErrorMessage()); + return Response.failure(e); + } + + /** + * 捕获参数校验异常 + * + * @param request 请求 + * @param e 异常 + * @return 响应结果 + */ + @ExceptionHandler({MethodArgumentNotValidException.class}) + @ResponseBody + public Response handleMethodArgumentNotValidException(HttpServletRequest request, + MethodArgumentNotValidException e) { + // 参数错误异常码 + String errorCode = ResponseCodeEnum.PARAM_NOT_VALID.getErrorCode(); + + // 获取 BindingResult + BindingResult bindingResult = e.getBindingResult(); + + StringBuilder sb = new StringBuilder(); + + // 获取校验不通过的字段,并组合错误信息,格式为: email 邮箱格式不正确, 当前值: '123124qq.com'; + Optional.ofNullable(bindingResult.getFieldErrors()).ifPresent(errors -> { + errors.forEach(error -> sb.append(error.getField()).append(" ").append(error.getDefaultMessage()) + .append(", 当前值: '").append(error.getRejectedValue()).append("'; ") + + ); + }); + + // 错误信息 + String errorMessage = sb.toString(); + + log.warn("{} request error, errorCode: {}, errorMessage: {}", request.getRequestURI(), errorCode, errorMessage); + + return Response.failure(errorCode, errorMessage); + } + + /** + * 其他类型异常 + * + * @param request 请求 + * @param e 异常 + * @return 响应结果 + */ + @ExceptionHandler({Exception.class}) + @ResponseBody + public Response handleOtherException(HttpServletRequest request, Exception e) { + log.error("{} request error, ", request.getRequestURI(), e); + return Response.failure(ResponseCodeEnum.SYSTEM_ERROR); + } +} diff --git a/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/vo/User.java b/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/vo/User.java index c568347..b6ec884 100644 --- a/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/vo/User.java +++ b/xiaoyi-auth/src/main/java/com/jy/xiaoyishu/auth/vo/User.java @@ -8,6 +8,9 @@ import lombok.NoArgsConstructor; import java.io.Serializable; import java.time.LocalDateTime; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + /** * * @author ayi @@ -21,7 +24,9 @@ import java.time.LocalDateTime; @AllArgsConstructor @NoArgsConstructor public class User implements Serializable { + @NotNull(message = "用户ID不能为空") private Long id; + @NotBlank(message = "用户名称不能为空") private String name; private Integer age; private LocalDateTime createTime; diff --git a/xiaoyi-auth/src/main/resources/config/application-dev.yml b/xiaoyi-auth/src/main/resources/config/application-dev.yml index 175eb32..1bc8e41 100644 --- a/xiaoyi-auth/src/main/resources/config/application-dev.yml +++ b/xiaoyi-auth/src/main/resources/config/application-dev.yml @@ -55,9 +55,9 @@ spring: max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) min-idle: 0 # 连接池中的最小空闲连接 max-idle: 10 # 连接池中的最大空闲连接 - output: - ansi: - enabled: always +# output: +# ansi: +# enabled: always application: name: xiaoyishu-auth diff --git a/xiaoyi-framework/.flattened-pom.xml b/xiaoyi-framework/.flattened-pom.xml deleted file mode 100644 index f45b1ad..0000000 --- a/xiaoyi-framework/.flattened-pom.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - 4.0.0 - - com.jy - xiaoyishu - 0.0.1-SNAPSHOT - - com.jy - xiaoyi-framework - 0.0.1-SNAPSHOT - pom - ${project.artifactId} - 平台基础设施层:封装一些常用功能,供各个业务线拿来即用 - - xiaoyi-common - xiaoyi-spring-boot-starter-biz-operationlog - xiaoyi-spring-boot-starter-jackson - - diff --git a/xiaoyi-framework/xiaoyi-common/.flattened-pom.xml b/xiaoyi-framework/xiaoyi-common/.flattened-pom.xml deleted file mode 100644 index 366fed9..0000000 --- a/xiaoyi-framework/xiaoyi-common/.flattened-pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - com.jy - xiaoyi-framework - 0.0.1-SNAPSHOT - - com.jy - xiaoyi-common - 0.0.1-SNAPSHOT - ${project.artifactId} - 平台基础设施层:封装一些常用功能,供各个业务线拿来即用 - - - org.projectlombok - lombok - - - com.fasterxml.jackson.core - jackson-databind - - - com.fasterxml.jackson.core - jackson-core - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - - - org.springframework.boot - spring-boot-starter-aop - - - diff --git a/xiaoyi-framework/xiaoyi-common/pom.xml b/xiaoyi-framework/xiaoyi-common/pom.xml index 32655d8..b2aaa50 100644 --- a/xiaoyi-framework/xiaoyi-common/pom.xml +++ b/xiaoyi-framework/xiaoyi-common/pom.xml @@ -42,12 +42,21 @@ org.springframework.boot spring-boot-starter-aop - + org.fusesource.jansi jansi + + + jakarta.validation + jakarta.validation-api + + + org.hibernate.validator + hibernate-validator + \ No newline at end of file diff --git a/xiaoyi-framework/xiaoyi-common/src/main/java/com/jy/framework/common/exception/BaseExceptionInterface.java b/xiaoyi-framework/xiaoyi-common/src/main/java/com/jy/framework/common/exception/BaseExceptionInterface.java index 2492cde..81880e1 100644 --- a/xiaoyi-framework/xiaoyi-common/src/main/java/com/jy/framework/common/exception/BaseExceptionInterface.java +++ b/xiaoyi-framework/xiaoyi-common/src/main/java/com/jy/framework/common/exception/BaseExceptionInterface.java @@ -14,13 +14,13 @@ public interface BaseExceptionInterface { * * @return 异常码 */ - String getCode(); + String getErrorCode(); /** * 获取异常信息 * * @return 异常信息 */ - String getMessage(); + String getErrorMessage(); } diff --git a/xiaoyi-framework/xiaoyi-common/src/main/java/com/jy/framework/common/exception/BizException.java b/xiaoyi-framework/xiaoyi-common/src/main/java/com/jy/framework/common/exception/BizException.java index 283310a..8c96436 100644 --- a/xiaoyi-framework/xiaoyi-common/src/main/java/com/jy/framework/common/exception/BizException.java +++ b/xiaoyi-framework/xiaoyi-common/src/main/java/com/jy/framework/common/exception/BizException.java @@ -18,12 +18,12 @@ public class BizException extends RuntimeException { /** * 异常码 */ - private String code; + private String errorCode; /** * 异常信息 */ - private String message; + private String errorMessage; /** * 构造函数 @@ -31,8 +31,8 @@ public class BizException extends RuntimeException { * @param baseExceptionInterface 基础异常接口 */ public BizException(BaseExceptionInterface baseExceptionInterface) { - this.code = baseExceptionInterface.getCode(); - this.message = baseExceptionInterface.getMessage(); + this.errorCode = baseExceptionInterface.getErrorCode(); + this.errorMessage = baseExceptionInterface.getErrorMessage(); } } diff --git a/xiaoyi-framework/xiaoyi-common/src/main/java/com/jy/framework/common/response/Response.java b/xiaoyi-framework/xiaoyi-common/src/main/java/com/jy/framework/common/response/Response.java index ad043d6..40a9b09 100644 --- a/xiaoyi-framework/xiaoyi-common/src/main/java/com/jy/framework/common/response/Response.java +++ b/xiaoyi-framework/xiaoyi-common/src/main/java/com/jy/framework/common/response/Response.java @@ -2,6 +2,7 @@ package com.jy.framework.common.response; import java.io.Serial; import java.io.Serializable; +import java.time.LocalDateTime; import lombok.Data; import com.jy.framework.common.exception.BaseExceptionInterface; @@ -31,6 +32,11 @@ public class Response implements Serializable { */ private String message; + /** + * 响应时间 + */ + private LocalDateTime time = LocalDateTime.now(); + /** * 是否成功 */ @@ -110,8 +116,8 @@ public class Response implements Serializable { public static Response failure(BizException bizException) { Response response = new Response<>(); response.setSuccess(false); - response.setCode(bizException.getCode()); - response.setMessage(bizException.getMessage()); + response.setCode(bizException.getErrorCode()); + response.setMessage(bizException.getErrorMessage()); return response; } @@ -125,8 +131,8 @@ public class Response implements Serializable { public static Response failure(BaseExceptionInterface baseExceptionInterface) { Response response = new Response<>(); response.setSuccess(false); - response.setCode(baseExceptionInterface.getCode()); - response.setMessage(baseExceptionInterface.getMessage()); + response.setCode(baseExceptionInterface.getErrorCode()); + response.setMessage(baseExceptionInterface.getErrorMessage()); return response; } } diff --git a/xiaoyi-framework/xiaoyi-spring-boot-starter-biz-operationlog/.flattened-pom.xml b/xiaoyi-framework/xiaoyi-spring-boot-starter-biz-operationlog/.flattened-pom.xml deleted file mode 100644 index b569448..0000000 --- a/xiaoyi-framework/xiaoyi-spring-boot-starter-biz-operationlog/.flattened-pom.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - 4.0.0 - - com.jy - xiaoyi-framework - 0.0.1-SNAPSHOT - - com.jy - xiaoyi-spring-boot-starter-biz-operationlog - 0.0.1-SNAPSHOT - ${project.artifactId} - 平台基础设施层:操作日志记录器 - - - com.jy - xiaoyi-common - - - diff --git a/xiaoyi-framework/xiaoyi-spring-boot-starter-jackson/.flattened-pom.xml b/xiaoyi-framework/xiaoyi-spring-boot-starter-jackson/.flattened-pom.xml deleted file mode 100644 index 6af1732..0000000 --- a/xiaoyi-framework/xiaoyi-spring-boot-starter-jackson/.flattened-pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - 4.0.0 - - com.jy - xiaoyi-framework - 0.0.1-SNAPSHOT - - com.jy - xiaoyi-spring-boot-starter-jackson - 0.0.1-SNAPSHOT - ${project.artifactId} - 平台基础设施层:Jackson 配置 - - - com.jy - xiaoyi-common - - - org.springframework.boot - spring-boot-autoconfigure - - -