fix: ClassCopyException 捕获处理
This commit is contained in:
parent
e65efd1883
commit
1e0e75bf9a
10
src/main/java/com/jsl/oa/exception/ClassCopyException.java
Normal file
10
src/main/java/com/jsl/oa/exception/ClassCopyException.java
Normal file
@ -0,0 +1,10 @@
|
||||
package com.jsl.oa.exception;
|
||||
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ClassCopyException extends IllegalAccessException {
|
||||
public ClassCopyException(@NotNull ErrorCode errorCode) {
|
||||
super(errorCode.getOutput() + "|" + errorCode.getMessage());
|
||||
}
|
||||
}
|
@ -35,7 +35,7 @@ public class ProcessException {
|
||||
return ResultUtil.error("HttpMessageNotReadable", 400, "请求参数错误");
|
||||
}
|
||||
@ExceptionHandler(value = MissingServletRequestParameterException.class)
|
||||
public ResponseEntity<BaseResponse> businessMissingServletRequestParameterExceptionException(MissingServletRequestParameterException e) {
|
||||
public ResponseEntity<BaseResponse> businessMissingServletRequestParameterException(MissingServletRequestParameterException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return ResponseEntity
|
||||
.status(400)
|
||||
@ -45,6 +45,12 @@ public class ProcessException {
|
||||
@ExceptionHandler(value = Exception.class)
|
||||
public ResponseEntity<BaseResponse> businessException(@NotNull Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return ResultUtil.error("ServerInternalError", 500, "服务器内部错误");
|
||||
return ResultUtil.error("ServerInternalError", 50000, "服务器内部错误");
|
||||
}
|
||||
|
||||
@ExceptionHandler(value = ClassCopyException.class)
|
||||
public ResponseEntity<BaseResponse> businessClassCopyException(@NotNull ClassCopyException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return ResultUtil.error("ServerInternalError", 50001, "服务器内部错误");
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.jsl.oa.services;
|
||||
|
||||
import com.jsl.oa.exception.ClassCopyException;
|
||||
import com.jsl.oa.model.voData.RoleAddVo;
|
||||
import com.jsl.oa.model.voData.RoleEditVO;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
@ -25,7 +26,7 @@ public interface RoleService {
|
||||
|
||||
BaseResponse roleDelete(HttpServletRequest request, Long id);
|
||||
|
||||
BaseResponse addRole(HttpServletRequest request, RoleAddVo roleAddVO);
|
||||
BaseResponse addRole(HttpServletRequest request, RoleAddVo roleAddVO) throws ClassCopyException;
|
||||
|
||||
BaseResponse roleChangeUser(HttpServletRequest request, Long uid, Long rid);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.jsl.oa.services;
|
||||
|
||||
import com.jsl.oa.exception.ClassCopyException;
|
||||
import com.jsl.oa.model.doData.UserDO;
|
||||
import com.jsl.oa.model.voData.UserAddVo;
|
||||
import com.jsl.oa.model.voData.UserAllCurrentVO;
|
||||
@ -86,10 +87,10 @@ public interface UserService {
|
||||
|
||||
BaseResponse userAdd(UserAddVo userAddVo, HttpServletRequest request);
|
||||
|
||||
BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request);
|
||||
BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request) throws ClassCopyException;
|
||||
|
||||
|
||||
BaseResponse userProfileGet(HttpServletRequest request);
|
||||
BaseResponse userProfileGet(HttpServletRequest request) throws ClassCopyException;
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.jsl.oa.services.impl;
|
||||
|
||||
import com.jsl.oa.common.constant.BusinessConstants;
|
||||
import com.jsl.oa.exception.BusinessException;
|
||||
import com.jsl.oa.mapper.RoleMapper;
|
||||
import com.jsl.oa.mapper.UserMapper;
|
||||
import com.jsl.oa.model.doData.RoleUserDO;
|
||||
@ -69,7 +68,7 @@ public class AuthServiceImpl implements AuthService {
|
||||
userDO.setPassword(null);
|
||||
return ResultUtil.success("注册成功", userDO);
|
||||
} else {
|
||||
throw new BusinessException(ErrorCode.DATABASE_INSERT_ERROR);
|
||||
return ResultUtil.error(ErrorCode.DATABASE_INSERT_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.jsl.oa.services.impl;
|
||||
|
||||
import com.jsl.oa.dao.RoleDAO;
|
||||
import com.jsl.oa.exception.ClassCopyException;
|
||||
import com.jsl.oa.model.doData.RoleDO;
|
||||
import com.jsl.oa.model.voData.RoleAddVo;
|
||||
import com.jsl.oa.model.voData.RoleEditVO;
|
||||
@ -119,7 +120,7 @@ public class RoleServiceImpl implements RoleService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseResponse addRole(HttpServletRequest request, RoleAddVo roleAddVO) {
|
||||
public BaseResponse addRole(HttpServletRequest request, RoleAddVo roleAddVO) throws ClassCopyException {
|
||||
// 检查用户权限
|
||||
if (!Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
@ -128,12 +129,8 @@ public class RoleServiceImpl implements RoleService {
|
||||
String roleName = roleAddVO.getName();
|
||||
RoleDO roleDO = new RoleDO();
|
||||
if (!roleDAO.isExistRoleByRoleName(roleName)) {
|
||||
try {
|
||||
Processing.copyProperties(roleAddVO, roleDO);
|
||||
roleDO.setRoleName(roleAddVO.getName());
|
||||
} catch (Exception e) {
|
||||
return ResultUtil.error(ErrorCode.CLASS_COPY_EXCEPTION);
|
||||
}
|
||||
Processing.copyProperties(roleAddVO, roleDO);
|
||||
roleDO.setRoleName(roleAddVO.getName());
|
||||
} else {
|
||||
return ResultUtil.error(ErrorCode.ROLE_NAME_REPEAT);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.jsl.oa.services.impl;
|
||||
|
||||
import com.jsl.oa.dao.UserDAO;
|
||||
import com.jsl.oa.exception.BusinessException;
|
||||
import com.jsl.oa.exception.ClassCopyException;
|
||||
import com.jsl.oa.mapper.RoleMapper;
|
||||
import com.jsl.oa.model.doData.RoleUserDO;
|
||||
import com.jsl.oa.model.doData.UserCurrentDO;
|
||||
@ -44,13 +44,13 @@ public class UserServiceImpl implements UserService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseResponse userLock(HttpServletRequest request, Long id,Long isLock) {
|
||||
public BaseResponse userLock(HttpServletRequest request, Long id, Long isLock) {
|
||||
if (!Processing.checkUserIsAdmin(request, roleMapper)) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
}
|
||||
//判断用户是否存在
|
||||
if (userDAO.isExistUser(id)) {
|
||||
userDAO.userLock(id,isLock);
|
||||
userDAO.userLock(id, isLock);
|
||||
return ResultUtil.success("更改成功");
|
||||
} else return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
|
||||
}
|
||||
@ -158,14 +158,14 @@ public class UserServiceImpl implements UserService {
|
||||
userDO.setPassword(null);
|
||||
return ResultUtil.success("添加用户成功", userDO);
|
||||
} else {
|
||||
throw new BusinessException(ErrorCode.DATABASE_INSERT_ERROR);
|
||||
return ResultUtil.error(ErrorCode.DATABASE_INSERT_ERROR);
|
||||
}
|
||||
} else return ResultUtil.error(ErrorCode.USER_EXIST);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request) {
|
||||
public BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request) throws ClassCopyException {
|
||||
//检测用户是否为管理员
|
||||
BaseResponse checkManagerResult = isManager(request);
|
||||
if (checkManagerResult.getCode() != 200) {
|
||||
@ -179,11 +179,7 @@ public class UserServiceImpl implements UserService {
|
||||
}
|
||||
|
||||
//修改非空属性
|
||||
try {
|
||||
Processing.copyProperties(userEditVo, userDO);
|
||||
} catch (Exception e) {
|
||||
return ResultUtil.error(ErrorCode.CLASS_COPY_EXCEPTION);
|
||||
}
|
||||
Processing.copyProperties(userEditVo, userDO);
|
||||
|
||||
//向数据库中修改属性
|
||||
userDAO.userEdit(userDO);
|
||||
@ -192,15 +188,11 @@ public class UserServiceImpl implements UserService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseResponse userProfileGet(HttpServletRequest request) {
|
||||
public BaseResponse userProfileGet(HttpServletRequest request) throws ClassCopyException {
|
||||
// 获取用户Id
|
||||
UserDO userDO = userDAO.getUserById(Processing.getAuthHeaderToUserId(request));
|
||||
UserProfile userProfile = new UserProfile();
|
||||
try {
|
||||
Processing.copyProperties(userDO, userProfile);
|
||||
} catch (Exception e) {
|
||||
return ResultUtil.error(ErrorCode.CLASS_COPY_EXCEPTION);
|
||||
}
|
||||
Processing.copyProperties(userDO, userProfile);
|
||||
userProfile.setSex(Processing.getSex(userDO.getSex()));
|
||||
return ResultUtil.success(userProfile);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.jsl.oa.utils;
|
||||
|
||||
import com.jsl.oa.exception.ClassCopyException;
|
||||
import com.jsl.oa.mapper.RoleMapper;
|
||||
import com.jsl.oa.model.doData.RoleDO;
|
||||
import com.jsl.oa.model.doData.RoleUserDO;
|
||||
@ -182,43 +183,46 @@ public class Processing {
|
||||
* @Param source:
|
||||
* @Param dest:
|
||||
**/
|
||||
public static <T, S> T copyProperties(S source, T target) throws Exception {
|
||||
public static <T, S> T copyProperties(@NotNull S source, @NotNull T target) throws ClassCopyException {
|
||||
Class<?> sourceClass = source.getClass();
|
||||
Class<?> targetClass = target.getClass();
|
||||
|
||||
Field[] sourceFields = sourceClass.getDeclaredFields();
|
||||
for (Field sourceField : sourceFields) {
|
||||
String fieldName = sourceField.getName();
|
||||
Field targetField = null;
|
||||
try {
|
||||
targetField = targetClass.getDeclaredField(fieldName);
|
||||
} catch (NoSuchFieldException e) {
|
||||
// 目标对象不存在该属性,忽略
|
||||
continue;
|
||||
try {
|
||||
Field[] sourceFields = sourceClass.getDeclaredFields();
|
||||
for (Field sourceField : sourceFields) {
|
||||
String fieldName = sourceField.getName();
|
||||
Field targetField = null;
|
||||
try {
|
||||
targetField = targetClass.getDeclaredField(fieldName);
|
||||
} catch (NoSuchFieldException e) {
|
||||
// 目标对象不存在该属性,忽略
|
||||
continue;
|
||||
}
|
||||
|
||||
sourceField.setAccessible(true);
|
||||
targetField.setAccessible(true);
|
||||
|
||||
Object value = sourceField.get(source);
|
||||
|
||||
if(value == null){
|
||||
continue;
|
||||
}
|
||||
|
||||
//如果获取的值不为数字且等于“”,则跳过
|
||||
if ( !(value instanceof Number) && value.equals("")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!sourceField.getType().equals(targetField.getType())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
targetField.set(target, value);
|
||||
}
|
||||
|
||||
sourceField.setAccessible(true);
|
||||
targetField.setAccessible(true);
|
||||
|
||||
Object value = sourceField.get(source);
|
||||
|
||||
if(value == null){
|
||||
continue;
|
||||
}
|
||||
|
||||
//如果获取的值不为数字且等于“”,则跳过
|
||||
if ( !(value instanceof Number) && value.equals("")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!sourceField.getType().equals(targetField.getType())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
targetField.set(target, value);
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new ClassCopyException(ErrorCode.CLASS_COPY_EXCEPTION);
|
||||
}
|
||||
|
||||
return target;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user