Commit 3e9b05d8 by wzy

GlobalExceptionHandler

parent 453aeea9
......@@ -45,8 +45,14 @@
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
......
package cn.drive.config;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
@MapperScan("cn.drive.mapper")
public class MybatisPlus {
}
package cn.drive.controller;
import cn.drive.service.UserService;
import cn.drive.vo.ResponseVO;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import javax.validation.constraints.Email;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("user")
@RequestMapping("/user")
@RestController
public class UserController {
@Resource
UserService userService;
@GetMapping()
public ResponseEntity<?> sendVerificationCode(@Email String email) {
userService.sendVerificationCode(email);
return new ResponseEntity<>("已将验证码发送到"+email, HttpStatus.OK);
return new ResponseEntity<>(ResponseVO.success("已将验证码发送到 "+email), HttpStatus.OK);
}
}
package cn.drive.entity;
import lombok.Data;
import javax.validation.constraints.Email;
@Data
public class User {
@Email(message = "邮箱格式不正确")
private String email;
......
package cn.drive.enums;
public enum SysErrorEnum {
EMAIL_ALREADY_TAKEN(1000, "邮箱已被占用");
private final int code;
private final String msg;
SysErrorEnum(int code, String msg) {
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
package cn.drive.exception;
public enum ExceptionType {
EMAIL_ALREADY_TAKEN("邮箱已被占用");
String value;
ExceptionType(String value) {
this.value = value;
}
String getValue() {
return this.value;
}
}
package cn.drive.exception;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY;
@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler({InvalidRequestException.class})
public ResponseEntity<Object> handleInvalidRequest(RuntimeException e, WebRequest request) {
InvalidRequestException ire = (InvalidRequestException) e;
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
return handleExceptionInternal(e, null, headers, UNPROCESSABLE_ENTITY, request);
}
}
package cn.drive.exception;
import org.springframework.validation.Errors;
@SuppressWarnings("serial")
public class InvalidRequestException extends RuntimeException {
}
package cn.drive.exception;
import cn.drive.enums.SysErrorEnum;
import lombok.Data;
@Data
public class SysException extends RuntimeException{
private final int code;
private final String msg;
public SysException(int code, String msg) {
this.code = code;
this.msg = msg;
}
public SysException(SysErrorEnum sysErrorEnum) {
this.code = sysErrorEnum.getCode();
this.msg = sysErrorEnum.getMsg();
}
}
......@@ -2,9 +2,8 @@ package cn.drive.mapper;
import cn.drive.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Component;
import java.util.Optional;
@Component
public interface UserMapper extends BaseMapper<User> {
Optional<User> isEmailAlreadyTaken(String email);
}
......@@ -4,5 +4,5 @@ import cn.drive.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {
public void sendVerificationCode(String email);
void sendVerificationCode(String email);
}
package cn.drive.service.impl;
import cn.drive.entity.User;
import cn.drive.exception.ExceptionType;
import cn.drive.enums.SysErrorEnum;
import cn.drive.exception.InvalidRequestException;
import cn.drive.mapper.UserMapper;
import cn.drive.service.UserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
// @Resource
// @Resource
// UserMapper userMapper;
@Resource
UserService userService;
......@@ -19,10 +21,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
public void sendVerificationCode(String email) {
// EntityWrapper<User>
// userMapper.selectOne()
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("email", email);
if (userService.getOne(queryWrapper) != null) {
throw new RuntimeException(String.valueOf(ExceptionType.EMAIL_ALREADY_TAKEN));
//String.valueOf(SysErrorEnum.EMAIL_ALREADY_TAKEN)
throw new InvalidRequestException();
}
}
}
package cn.drive.vo;
import cn.drive.enums.SysErrorEnum;
import cn.drive.exception.SysException;
import lombok.Data;
@Data
public class ResponseVO<T> {
public static final int CODE_SUCCESS = 0;
public static final int CODE_FAILURE = -1;
public static final String MSG_SUCCESS = "请求成功";
public static final String MSG_FAILURE = "请求出错";
private int code;
private String msg;
private T data;
public ResponseVO(int code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public static ResponseVO<?> success() {
return new ResponseVO<>(CODE_SUCCESS, MSG_SUCCESS, null);
}
public static <T>ResponseVO<?> success(T data) {
return new ResponseVO<>(CODE_SUCCESS, MSG_SUCCESS, data);
}
public static ResponseVO<?> failure() {
return new ResponseVO<>(CODE_FAILURE, MSG_FAILURE, null);
}
public static ResponseVO<?> failure(SysErrorEnum errorEnum) {
return new ResponseVO<>(errorEnum.getCode(), errorEnum.getMsg(), null);
}
public static ResponseVO<?> failure(SysException sysException) {
return new ResponseVO<>(sysException.getCode(), sysException.getMsg(), null);
}
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 T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/yun_xin_drive?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: 123
mybatis-plus:
mapper-locations: classpath*:/mapper/**Mapper.xml
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment