parent
fd91bd15ca
commit
15baa50907
@ -0,0 +1,14 @@ |
|||||||
|
package net.lensfrex.dscape.dao.mapper; |
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import org.apache.ibatis.annotations.Mapper; |
||||||
|
import org.apache.ibatis.annotations.Select; |
||||||
|
import net.lensfrex.dscape.dao.entity.UserBasic; |
||||||
|
import java.util.List; |
||||||
|
/** |
||||||
|
* @description user_basicMapper |
||||||
|
* @author lensfrex |
||||||
|
* @date 2022-08-18 |
||||||
|
*/ |
||||||
|
@Mapper |
||||||
|
public interface UserBasicMapper extends BaseMapper<UserBasic> { |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package net.lensfrex.dscape.dao.service; |
||||||
|
import net.lensfrex.dscape.dao.entity.UserBasic; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
/** |
||||||
|
* @description user_basic服务层 |
||||||
|
* @author lensfrex |
||||||
|
* @date 2022-08-18 |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public interface UserBasicService extends IService<UserBasic> { |
||||||
|
|
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
/* |
||||||
|
* Class created by lensfrex. |
||||||
|
*/ |
||||||
|
|
||||||
|
package net.lensfrex.dscape.dao.service.impl; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import net.lensfrex.dscape.dao.entity.UserBasic; |
||||||
|
import net.lensfrex.dscape.dao.mapper.UserBasicMapper; |
||||||
|
import net.lensfrex.dscape.dao.service.UserBasicService; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
@Service |
||||||
|
public class UserBasicServiceImpl extends ServiceImpl<UserBasicMapper, UserBasic> implements UserBasicService { |
||||||
|
|
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package net.lensfrex.dscape.dto.request.user; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class RegisterRequestBody { |
||||||
|
private String password; |
||||||
|
private String superior; |
||||||
|
private String userName; |
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package net.lensfrex.dscape.dto.response.user; |
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class RegisterResponseBody { |
||||||
|
private String uid; |
||||||
|
} |
@ -1,62 +0,0 @@ |
|||||||
package net.lensfrex.dscape.enums.user; |
|
||||||
|
|
||||||
public class UserBasic { |
|
||||||
private String uid; |
|
||||||
private String userName; |
|
||||||
private String password; |
|
||||||
private UserStatus status; |
|
||||||
private UserRole role; |
|
||||||
|
|
||||||
public String getUid() { |
|
||||||
return uid; |
|
||||||
} |
|
||||||
|
|
||||||
public void setUid(String uid) { |
|
||||||
this.uid = uid; |
|
||||||
} |
|
||||||
|
|
||||||
public String getUserName() { |
|
||||||
return userName; |
|
||||||
} |
|
||||||
|
|
||||||
public void setUserName(String userName) { |
|
||||||
this.userName = userName; |
|
||||||
} |
|
||||||
|
|
||||||
public String getPassword() { |
|
||||||
return password; |
|
||||||
} |
|
||||||
|
|
||||||
public void setPassword(String password) { |
|
||||||
this.password = password; |
|
||||||
} |
|
||||||
|
|
||||||
public UserRole getRole() { |
|
||||||
return role; |
|
||||||
} |
|
||||||
|
|
||||||
public void setRole(UserRole role) { |
|
||||||
this.role = role; |
|
||||||
} |
|
||||||
|
|
||||||
public UserStatus getStatus() { |
|
||||||
return status; |
|
||||||
} |
|
||||||
|
|
||||||
public void setStatus(UserStatus status) { |
|
||||||
this.status = status; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String toString() { |
|
||||||
final StringBuffer sb = new StringBuffer("UserBasic{"); |
|
||||||
sb.append("uid='").append(uid).append('\''); |
|
||||||
sb.append(", userName='").append(userName).append('\''); |
|
||||||
sb.append(", password='").append(password).append('\''); |
|
||||||
sb.append(", status=").append(status); |
|
||||||
sb.append(", role=").append(role); |
|
||||||
sb.append('}'); |
|
||||||
return sb.toString(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
@ -1,17 +0,0 @@ |
|||||||
package net.lensfrex.dscape.enums.user; |
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.EnumValue; |
|
||||||
|
|
||||||
public enum UserRole { |
|
||||||
ADMIN(1, "admin"), NORMAL_USER(0, "normal"); |
|
||||||
|
|
||||||
@EnumValue |
|
||||||
private final int role; |
|
||||||
|
|
||||||
private final String desc; |
|
||||||
|
|
||||||
UserRole(int role, String desc) { |
|
||||||
this.role = role; |
|
||||||
this.desc = desc; |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,20 @@ |
|||||||
|
package net.lensfrex.dscape.enums.user; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.EnumValue; |
||||||
|
import lombok.Getter; |
||||||
|
|
||||||
|
@Getter |
||||||
|
public enum UserRoleEnum { |
||||||
|
ADMIN(1, "admin"), |
||||||
|
NORMAL_USER(0, "normal"); |
||||||
|
|
||||||
|
@EnumValue |
||||||
|
private final int code; |
||||||
|
|
||||||
|
private final String name; |
||||||
|
|
||||||
|
UserRoleEnum(int code, String name) { |
||||||
|
this.code = code; |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
} |
@ -1,15 +0,0 @@ |
|||||||
package net.lensfrex.dscape.enums.user; |
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.EnumValue; |
|
||||||
|
|
||||||
public enum UserStatus { |
|
||||||
|
|
||||||
NORMAL(0), BANNED(1), DELETED(2); |
|
||||||
|
|
||||||
@EnumValue |
|
||||||
private final int status; |
|
||||||
|
|
||||||
UserStatus(int status) { |
|
||||||
this.status = status; |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,21 @@ |
|||||||
|
package net.lensfrex.dscape.enums.user; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.EnumValue; |
||||||
|
import lombok.Getter; |
||||||
|
|
||||||
|
@Getter |
||||||
|
public enum UserStatusEnum { |
||||||
|
|
||||||
|
NORMAL(0, "正常"), |
||||||
|
BANNED(1, "封禁中"), |
||||||
|
NOT_IDENTIFIED(2, "管理员未认证"); |
||||||
|
|
||||||
|
@EnumValue |
||||||
|
private final int code; |
||||||
|
private final String name; |
||||||
|
|
||||||
|
UserStatusEnum(int code, String name) { |
||||||
|
this.code = code; |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package net.lensfrex.dscape.exception; |
||||||
|
|
||||||
|
import net.lensfrex.dscape.dto.response.general.ResponseCode; |
||||||
|
|
||||||
|
public class GlobalException extends RuntimeException { |
||||||
|
private final ResponseCode responseCode; |
||||||
|
|
||||||
|
public GlobalException(ResponseCode responseCode) { |
||||||
|
super(responseCode.toString()); |
||||||
|
this.responseCode = responseCode; |
||||||
|
} |
||||||
|
|
||||||
|
public ResponseCode getResponseCode() { |
||||||
|
return responseCode; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,137 @@ |
|||||||
|
package net.lensfrex.dscape.exception.handler; |
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonMappingException; |
||||||
|
import net.lensfrex.dscape.dto.response.general.Response; |
||||||
|
import net.lensfrex.dscape.dto.response.general.ResponseCode; |
||||||
|
import net.lensfrex.dscape.exception.GlobalException; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.springframework.http.converter.HttpMessageNotReadableException; |
||||||
|
import org.springframework.web.HttpMediaTypeNotSupportedException; |
||||||
|
import org.springframework.web.HttpRequestMethodNotSupportedException; |
||||||
|
import org.springframework.web.bind.MissingServletRequestParameterException; |
||||||
|
import org.springframework.web.bind.annotation.ExceptionHandler; |
||||||
|
import org.springframework.web.bind.annotation.RestControllerAdvice; |
||||||
|
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; |
||||||
|
import org.springframework.web.multipart.MultipartException; |
||||||
|
|
||||||
|
/** |
||||||
|
* 全局异常处理,负责后端抛出Exception时响应相应的信息 |
||||||
|
*/ |
||||||
|
@RestControllerAdvice |
||||||
|
public class GlobalExceptionHandler { |
||||||
|
private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); |
||||||
|
|
||||||
|
/** |
||||||
|
* 负责处理各种自定义业务异常(权限不足,学号不存在等) |
||||||
|
* @param e 抛出的异常 |
||||||
|
* @return 统一响应 |
||||||
|
*/ |
||||||
|
@ExceptionHandler(GlobalException.class) |
||||||
|
public Response<Object> handler(GlobalException e) { |
||||||
|
log.debug("请求错误: " + e.getResponseCode().getMessage()); |
||||||
|
return Response.error(e.getResponseCode()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 负责处理和响应其他部分都没有接收的异常(说白了就是剩下的都返回50000) |
||||||
|
* 这部分日志要特别关注,所以以error打出来 |
||||||
|
* @param e 异常 |
||||||
|
* @return 统一响应 |
||||||
|
*/ |
||||||
|
@ExceptionHandler(Exception.class) |
||||||
|
public Response<Object> handler(Exception e) { |
||||||
|
log.error("请求错误: " + e.getMessage()); |
||||||
|
log.error("异常类: " + e.getClass()); |
||||||
|
log.error("追踪:", e); |
||||||
|
return Response.error(ResponseCode.SERVER_INTERNAL_ERROR); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 处理参数不完整的请求异常 |
||||||
|
* @param e 异常 |
||||||
|
* @return 统一响应 |
||||||
|
*/ |
||||||
|
@ExceptionHandler(MissingServletRequestParameterException.class) |
||||||
|
public Response<Object> handler(MissingServletRequestParameterException e) { |
||||||
|
log.debug("请求的参数不完整: " + e.getMessage()); |
||||||
|
return Response.error(ResponseCode.PARAM_WRONG); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 处理参数类型错误的请求异常(请求参数类型错误) |
||||||
|
* @param e 异常 |
||||||
|
* @return 统一响应 |
||||||
|
*/ |
||||||
|
@ExceptionHandler(MethodArgumentTypeMismatchException.class) |
||||||
|
public Response<Object> handler(MethodArgumentTypeMismatchException e) { |
||||||
|
log.debug(String.format("请求错误(%s): %s", e.getClass().getName(), e.getMessage())); |
||||||
|
return Response.error(ResponseCode.PARAM_WRONG); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 处理参数类型错误的请求异常(请求参数类型错误) |
||||||
|
* @param e 异常 |
||||||
|
* @return 统一响应 |
||||||
|
*/ |
||||||
|
@ExceptionHandler(IllegalArgumentException.class) |
||||||
|
public Response<Object> handler(IllegalArgumentException e) { |
||||||
|
log.debug(String.format("请求错误(%s): %s", e.getClass().getName(), e.getMessage())); |
||||||
|
return Response.error(ResponseCode.PARAM_WRONG); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 处理参数类型错误的请求异常2(Json解析错误) |
||||||
|
* @param e 异常 |
||||||
|
* @return 统一响应 |
||||||
|
*/ |
||||||
|
@ExceptionHandler(JsonMappingException.class) |
||||||
|
public Response<Object> handler(JsonMappingException e) { |
||||||
|
log.debug(String.format("请求错误(%s): %s", e.getClass().getName(), e.getMessage())); |
||||||
|
return Response.error(ResponseCode.PARAM_WRONG); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 处理参数类型错误的请求异常3(字段映射错误) |
||||||
|
* @param e 异常 |
||||||
|
* @return 统一响应 |
||||||
|
*/ |
||||||
|
@ExceptionHandler(HttpMessageNotReadableException.class) |
||||||
|
public Response<Object> handler(HttpMessageNotReadableException e) { |
||||||
|
log.debug(String.format("请求错误(%s): %s", e.getClass().getName(), e.getMessage())); |
||||||
|
return Response.error(ResponseCode.PARAM_WRONG); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 处理请求头中“Content-Type”字段不正确的异常 |
||||||
|
* @param e 异常 |
||||||
|
* @return 统一响应 |
||||||
|
*/ |
||||||
|
@ExceptionHandler(HttpMediaTypeNotSupportedException.class) |
||||||
|
public Response<Object> handler(HttpMediaTypeNotSupportedException e) { |
||||||
|
log.debug(String.format("请求错误(%s): %s", e.getClass().getName(), e.getMessage())); |
||||||
|
return Response.error(ResponseCode.PARAM_WRONG, "请求头\"Contene-Type\"字段有误"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 处理请求方法错误的情况 |
||||||
|
* @param e 异常 |
||||||
|
* @return 统一响应 |
||||||
|
*/ |
||||||
|
@ExceptionHandler(HttpRequestMethodNotSupportedException.class) |
||||||
|
public Response<Object> handler(HttpRequestMethodNotSupportedException e) { |
||||||
|
log.debug(String.format("请求错误(%s): %s", e.getClass().getName(), e.getMessage())); |
||||||
|
return Response.error(ResponseCode.INVALID_REQUEST); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 处理上传文件时不是Multipart方式 |
||||||
|
* @param e 异常 |
||||||
|
* @return 统一响应 |
||||||
|
*/ |
||||||
|
@ExceptionHandler(MultipartException.class) |
||||||
|
public Response<Object> handler(MultipartException e) { |
||||||
|
log.debug(String.format("请求错误(%s): %s", e.getClass().getName(), e.getMessage())); |
||||||
|
return Response.error(ResponseCode.INVALID_REQUEST); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
/* |
||||||
|
* Class created by lensfrex. |
||||||
|
*/ |
||||||
|
|
||||||
|
package net.lensfrex.dscape.utils; |
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||||
|
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream; |
||||||
|
import java.io.ByteArrayOutputStream; |
||||||
|
import java.io.ObjectInputStream; |
||||||
|
import java.io.ObjectOutputStream; |
||||||
|
|
||||||
|
@Component |
||||||
|
public class ObjectJsonSerializer { |
||||||
|
/** |
||||||
|
* 序列化对象到json字符串 |
||||||
|
* |
||||||
|
* @param obj 待序列化的对象 |
||||||
|
* @return 序列化后的数据 |
||||||
|
*/ |
||||||
|
public String serialize(Object obj) { |
||||||
|
try { |
||||||
|
return new ObjectMapper().registerModule(new JavaTimeModule()).writeValueAsString(obj); |
||||||
|
} catch (Exception e) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 反序列化对象 |
||||||
|
* |
||||||
|
* @param data 源数据 |
||||||
|
* @return 反序列化后的对象 |
||||||
|
*/ |
||||||
|
public <T> T deserialize(String data, Class<T> valueType) { |
||||||
|
try { |
||||||
|
return new ObjectMapper().registerModule(new JavaTimeModule()).readValue(data, valueType); |
||||||
|
} catch (Exception e) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
/* |
||||||
|
* Class created by lensfrex. |
||||||
|
*/ |
||||||
|
|
||||||
|
package net.lensfrex.dscape.utils; |
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream; |
||||||
|
import java.io.ByteArrayOutputStream; |
||||||
|
import java.io.ObjectInputStream; |
||||||
|
import java.io.ObjectOutputStream; |
||||||
|
|
||||||
|
@Slf4j |
||||||
|
@Component |
||||||
|
public class ObjectSerializer { |
||||||
|
/** |
||||||
|
* 序列化对象到二进制 |
||||||
|
* |
||||||
|
* @param obj 待序列化的对象 |
||||||
|
* @return 序列化后的数据 |
||||||
|
*/ |
||||||
|
public byte[] serialize(Object obj) { |
||||||
|
try { |
||||||
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
||||||
|
new ObjectOutputStream(byteArrayOutputStream).writeObject(obj); |
||||||
|
|
||||||
|
return byteArrayOutputStream.toByteArray(); |
||||||
|
} catch (Exception e) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 反序列化对象 |
||||||
|
* |
||||||
|
* @param data 源数据 |
||||||
|
* @return 反序列化后的对象 |
||||||
|
*/ |
||||||
|
public Object deserialize(byte[] data) { |
||||||
|
try { |
||||||
|
return new ObjectInputStream(new ByteArrayInputStream(data)).readObject(); |
||||||
|
} catch (Exception e) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue