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