diff --git a/.gitignore b/.gitignore index c4d617b..b7b6d46 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,5 @@ build/ ### VS Code ### .vscode/ -/src/main/resources/application-dev.properties \ No newline at end of file +/src/main/resources/application-dev.properties +/logs \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2774ce2..c7560a7 100644 --- a/pom.xml +++ b/pom.xml @@ -1,84 +1,89 @@ - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.0.2 - - - xyz.playedu - playedu-api - 0.1 - playedu-api - playedu-api - - 17 - - - - org.springframework.boot - spring-boot-starter-data-redis - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-websocket - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 3.0.0 - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.0.2 + + + xyz.playedu + playedu-api + 0.1 + playedu-api + playedu-api + + 17 + + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-websocket + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 3.0.0 + - - org.springframework.boot - spring-boot-devtools - runtime - true - - - com.mysql - mysql-connector-j - runtime - - - org.projectlombok - lombok - true - - - org.springframework.boot - spring-boot-starter-test - test - + + org.springframework.boot + spring-boot-devtools + runtime + true + + + com.mysql + mysql-connector-j + runtime + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + - - com.baomidou - mybatis-plus-boot-starter - 3.5.3 - - + + com.baomidou + mybatis-plus-boot-starter + 3.5.3 + - - - - org.springframework.boot - spring-boot-maven-plugin - - - - org.projectlombok - lombok - - - - - - + + org.springframework.boot + spring-boot-starter-validation + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + diff --git a/src/main/java/xyz/playedu/api/controller/ExceptionController.java b/src/main/java/xyz/playedu/api/controller/ExceptionController.java index f89023d..549db18 100644 --- a/src/main/java/xyz/playedu/api/controller/ExceptionController.java +++ b/src/main/java/xyz/playedu/api/controller/ExceptionController.java @@ -1,22 +1,42 @@ package xyz.playedu.api.controller; -import org.springframework.web.HttpRequestHandler; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.validation.ObjectError; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import xyz.playedu.api.exception.ServiceException; import xyz.playedu.api.types.JsonResponse; +import java.util.List; + @RestControllerAdvice public class ExceptionController { - @ExceptionHandler(Exception.class) - public JsonResponse exceptionHandler(Exception e) { - return JsonResponse.error("系统错误", 500); - } +// @ExceptionHandler(Exception.class) +// public JsonResponse exceptionHandler(Exception e) { +// return JsonResponse.error("系统错误", 500); +// } @ExceptionHandler(ServiceException.class) public JsonResponse serviceExceptionHandler(ServiceException e) { return JsonResponse.error(e.getMessage(), 1); } + @ExceptionHandler(HttpMessageNotReadableException.class) + public JsonResponse serviceExceptionHandler(HttpMessageNotReadableException e) { + return JsonResponse.error("参数为空", 406); + } + + @ExceptionHandler(MethodArgumentNotValidException.class) + public JsonResponse serviceExceptionHandler(MethodArgumentNotValidException e) { + StringBuffer errorMsg = new StringBuffer(); + List allErrors = e.getBindingResult().getAllErrors(); + for (ObjectError tmpError : allErrors) { + errorMsg.append(tmpError.getDefaultMessage()).append(","); + } + String msg = errorMsg.substring(0, errorMsg.length() - 1); + return JsonResponse.error(msg, 406); + } + } diff --git a/src/main/java/xyz/playedu/api/controller/admin/AdminUserController.java b/src/main/java/xyz/playedu/api/controller/admin/AdminUserController.java index d0a7964..3708fdf 100644 --- a/src/main/java/xyz/playedu/api/controller/admin/AdminUserController.java +++ b/src/main/java/xyz/playedu/api/controller/admin/AdminUserController.java @@ -17,14 +17,9 @@ public class AdminUserController { private AdminUserServiceImpl adminUserService; @GetMapping("/admin/user/index") - public JsonResponse List(@RequestParam("page") Integer page, @RequestParam("size") Integer size) { + public JsonResponse List(@RequestParam(name = "page", defaultValue = "1") Integer page, @RequestParam(name = "size", defaultValue = "10") Integer size) { PaginationResult result = adminUserService.paginate(page, size, null); return JsonResponse.data(result); } - @GetMapping("/admmin/user/test") - public void TestException() throws ServiceException { - throw new RuntimeException("我是错误"); - } - } diff --git a/src/main/java/xyz/playedu/api/controller/admin/LoginController.java b/src/main/java/xyz/playedu/api/controller/admin/LoginController.java new file mode 100644 index 0000000..f9afae5 --- /dev/null +++ b/src/main/java/xyz/playedu/api/controller/admin/LoginController.java @@ -0,0 +1,30 @@ +package xyz.playedu.api.controller.admin; + +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import xyz.playedu.api.request.LoginRequest; +import xyz.playedu.api.types.JsonResponse; + +import java.util.HashMap; + +@RestController +@RequestMapping("/admin/v1/auth") +public class LoginController { + + @PostMapping("/login") + public JsonResponse login(@RequestBody @Validated LoginRequest loginRequest) { + HashMap map = new HashMap<>(); + map.put("email", loginRequest.email); + map.put("password", loginRequest.password); + return JsonResponse.data(map); + } + + @PostMapping("/logout") + public JsonResponse logout() { + return JsonResponse.success("success"); + } + +} diff --git a/src/main/java/xyz/playedu/api/request/LoginRequest.java b/src/main/java/xyz/playedu/api/request/LoginRequest.java new file mode 100644 index 0000000..b18c971 --- /dev/null +++ b/src/main/java/xyz/playedu/api/request/LoginRequest.java @@ -0,0 +1,54 @@ +package xyz.playedu.api.request; + +import jakarta.validation.constraints.NotNull; + +import java.io.Serializable; + +public class LoginRequest implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "请输入邮箱") + public String email; + + @NotNull(message = "请输入密码") + public String password; + + @NotNull(message = "请输入图形验证码") + public String captchaValue; + + @NotNull(message = "captchaKey参数为空") + public String captchaKey; + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getCaptchaValue() { + return captchaValue; + } + + public void setCaptchaValue(String captchaValue) { + this.captchaValue = captchaValue; + } + + public String getCaptchaKey() { + return captchaKey; + } + + public void setCaptchaKey(String captchaKey) { + this.captchaKey = captchaKey; + } +} diff --git a/src/main/java/xyz/playedu/api/request/PaginationRequest.java b/src/main/java/xyz/playedu/api/request/PaginationRequest.java new file mode 100644 index 0000000..fea9e51 --- /dev/null +++ b/src/main/java/xyz/playedu/api/request/PaginationRequest.java @@ -0,0 +1,34 @@ +package xyz.playedu.api.request; + +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; + +import java.io.Serializable; + +public class PaginationRequest implements Serializable { + + private static final long serialVersionUID = 1L; + + @Min(value = 1, message = "page参数值不能少于1") + public Integer page = 1; + + @Min(value = 1, message = "size参数值不能少于1") + @Max(value = 1000, message = "size参数值不能超过1000") + public Integer size = 10; + + public Integer getPage() { + return page; + } + + public void setPage(Integer page) { + this.page = page; + } + + public Integer getSize() { + return size; + } + + public void setSize(Integer size) { + this.size = size; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ef4533a..67e4f82 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,5 +1,9 @@ +# ???? spring.profiles.active=dev +#mysql +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + #mybatis mybatis.mapper-locations=classpath:mapper/*.xml diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..53457f6 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + %red(%d{yyyy-MM-dd HH:mm:ss}) - %green([%thread]) - %highlight(%-5level) - %yellow(%logger) - %cyan(%msg%n) + + UTF-8 + + + + + + + ${log.filePath}/${spring.application.name}_debug.log + + + ${log.filePath}/debug/${spring.application.name}_debug.%d{yyyy-MM-dd}.log.gz + + + ${log.maxHistory} + + + ${log.pattern} + + + DEBUG + ACCEPT + DENY + + + + + + + ${log.filePath}/${spring.application.name}_info.log + + + ${log.filePath}/info/${spring.application.name}_info.%d{yyyy-MM-dd}.log.gz + + + ${log.maxHistory} + + + ${log.pattern} + + + INFO + ACCEPT + DENY + + + + + + + ${log.filePath}/${spring.application.name}_error.log + + + ${log.filePath}/error/${spring.application.name}_error.%d{yyyy-MM-dd}.log.gz + + + ${log.maxHistory} + + + ${log.pattern} + + + ERROR + ACCEPT + DENY + + + + + + + + + + +