fix: ClassCopyException 捕获处理

This commit is contained in:
筱锋xiao_lfeng 2024-01-20 00:23:34 +08:00
parent e65efd1883
commit 26b58e3871
No known key found for this signature in database
GPG Key ID: F693AA12AABBFA87
10 changed files with 77 additions and 65 deletions

View File

@ -1,5 +1,6 @@
package com.jsl.oa.controllers; package com.jsl.oa.controllers;
import com.jsl.oa.exception.ClassCopyException;
import com.jsl.oa.model.voData.RoleAddVo; import com.jsl.oa.model.voData.RoleAddVo;
import com.jsl.oa.model.voData.RoleEditVO; import com.jsl.oa.model.voData.RoleEditVO;
import com.jsl.oa.services.RoleService; import com.jsl.oa.services.RoleService;
@ -131,7 +132,7 @@ public class RoleController {
* @Param uid: * @Param uid:
**/ **/
@PostMapping("role/add") @PostMapping("role/add")
public BaseResponse addRole(HttpServletRequest request, @RequestBody @Validated RoleAddVo roleAddVO, @NotNull BindingResult bindingResult ) { public BaseResponse addRole(HttpServletRequest request, @RequestBody @Validated RoleAddVo roleAddVO, @NotNull BindingResult bindingResult ) throws ClassCopyException {
log.info("请求接口[POST]: /role/add"); log.info("请求接口[POST]: /role/add");
// 判断是否有参数错误 // 判断是否有参数错误
if (bindingResult.hasErrors()) { if (bindingResult.hasErrors()) {

View File

@ -1,5 +1,6 @@
package com.jsl.oa.controllers; package com.jsl.oa.controllers;
import com.jsl.oa.exception.ClassCopyException;
import com.jsl.oa.model.voData.UserAddVo; import com.jsl.oa.model.voData.UserAddVo;
import com.jsl.oa.model.voData.UserAllCurrentVO; import com.jsl.oa.model.voData.UserAllCurrentVO;
import com.jsl.oa.model.voData.UserEditProfileVO; import com.jsl.oa.model.voData.UserEditProfileVO;
@ -165,7 +166,7 @@ public class UserController {
@PutMapping("/user/edit") @PutMapping("/user/edit")
public BaseResponse userEdit(@RequestBody @Validated UserEditVo userEditVo, BindingResult bindingResult, HttpServletRequest request){ public BaseResponse userEdit(@RequestBody @Validated UserEditVo userEditVo, BindingResult bindingResult, HttpServletRequest request) throws ClassCopyException {
// 判断是否有参数错误 // 判断是否有参数错误
if (bindingResult.hasErrors()) { if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
@ -175,7 +176,7 @@ public class UserController {
@GetMapping("/user/profile/get") @GetMapping("/user/profile/get")
public BaseResponse userProfileGet(HttpServletRequest request){ public BaseResponse userProfileGet(HttpServletRequest request) throws ClassCopyException {
return userService.userProfileGet(request); return userService.userProfileGet(request);
} }
} }

View 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());
}
}

View File

@ -35,7 +35,7 @@ public class ProcessException {
return ResultUtil.error("HttpMessageNotReadable", 400, "请求参数错误"); return ResultUtil.error("HttpMessageNotReadable", 400, "请求参数错误");
} }
@ExceptionHandler(value = MissingServletRequestParameterException.class) @ExceptionHandler(value = MissingServletRequestParameterException.class)
public ResponseEntity<BaseResponse> businessMissingServletRequestParameterExceptionException(MissingServletRequestParameterException e) { public ResponseEntity<BaseResponse> businessMissingServletRequestParameterException(MissingServletRequestParameterException e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
return ResponseEntity return ResponseEntity
.status(400) .status(400)
@ -45,6 +45,12 @@ public class ProcessException {
@ExceptionHandler(value = Exception.class) @ExceptionHandler(value = Exception.class)
public ResponseEntity<BaseResponse> businessException(@NotNull Exception e) { public ResponseEntity<BaseResponse> businessException(@NotNull Exception e) {
log.error(e.getMessage(), 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, "服务器内部错误");
} }
} }

View File

@ -1,5 +1,6 @@
package com.jsl.oa.services; package com.jsl.oa.services;
import com.jsl.oa.exception.ClassCopyException;
import com.jsl.oa.model.voData.RoleAddVo; import com.jsl.oa.model.voData.RoleAddVo;
import com.jsl.oa.model.voData.RoleEditVO; import com.jsl.oa.model.voData.RoleEditVO;
import com.jsl.oa.utils.BaseResponse; import com.jsl.oa.utils.BaseResponse;
@ -25,7 +26,7 @@ public interface RoleService {
BaseResponse roleDelete(HttpServletRequest request, Long id); 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); BaseResponse roleChangeUser(HttpServletRequest request, Long uid, Long rid);
} }

View File

@ -1,5 +1,6 @@
package com.jsl.oa.services; package com.jsl.oa.services;
import com.jsl.oa.exception.ClassCopyException;
import com.jsl.oa.model.doData.UserDO; import com.jsl.oa.model.doData.UserDO;
import com.jsl.oa.model.voData.UserAddVo; import com.jsl.oa.model.voData.UserAddVo;
import com.jsl.oa.model.voData.UserAllCurrentVO; import com.jsl.oa.model.voData.UserAllCurrentVO;
@ -86,10 +87,10 @@ public interface UserService {
BaseResponse userAdd(UserAddVo userAddVo, HttpServletRequest request); 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;
} }

View File

@ -1,7 +1,6 @@
package com.jsl.oa.services.impl; package com.jsl.oa.services.impl;
import com.jsl.oa.common.constant.BusinessConstants; import com.jsl.oa.common.constant.BusinessConstants;
import com.jsl.oa.exception.BusinessException;
import com.jsl.oa.mapper.RoleMapper; import com.jsl.oa.mapper.RoleMapper;
import com.jsl.oa.mapper.UserMapper; import com.jsl.oa.mapper.UserMapper;
import com.jsl.oa.model.doData.RoleUserDO; import com.jsl.oa.model.doData.RoleUserDO;
@ -69,7 +68,7 @@ public class AuthServiceImpl implements AuthService {
userDO.setPassword(null); userDO.setPassword(null);
return ResultUtil.success("注册成功", userDO); return ResultUtil.success("注册成功", userDO);
} else { } else {
throw new BusinessException(ErrorCode.DATABASE_INSERT_ERROR); return ResultUtil.error(ErrorCode.DATABASE_INSERT_ERROR);
} }
} }

View File

@ -1,6 +1,7 @@
package com.jsl.oa.services.impl; package com.jsl.oa.services.impl;
import com.jsl.oa.dao.RoleDAO; import com.jsl.oa.dao.RoleDAO;
import com.jsl.oa.exception.ClassCopyException;
import com.jsl.oa.model.doData.RoleDO; import com.jsl.oa.model.doData.RoleDO;
import com.jsl.oa.model.voData.RoleAddVo; import com.jsl.oa.model.voData.RoleAddVo;
import com.jsl.oa.model.voData.RoleEditVO; import com.jsl.oa.model.voData.RoleEditVO;
@ -119,7 +120,7 @@ public class RoleServiceImpl implements RoleService {
} }
@Override @Override
public BaseResponse addRole(HttpServletRequest request, RoleAddVo roleAddVO) { public BaseResponse addRole(HttpServletRequest request, RoleAddVo roleAddVO) throws ClassCopyException {
// 检查用户权限 // 检查用户权限
if (!Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) { if (!Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) {
return ResultUtil.error(ErrorCode.NOT_ADMIN); return ResultUtil.error(ErrorCode.NOT_ADMIN);
@ -128,12 +129,8 @@ public class RoleServiceImpl implements RoleService {
String roleName = roleAddVO.getName(); String roleName = roleAddVO.getName();
RoleDO roleDO = new RoleDO(); RoleDO roleDO = new RoleDO();
if (!roleDAO.isExistRoleByRoleName(roleName)) { if (!roleDAO.isExistRoleByRoleName(roleName)) {
try {
Processing.copyProperties(roleAddVO, roleDO); Processing.copyProperties(roleAddVO, roleDO);
roleDO.setRoleName(roleAddVO.getName()); roleDO.setRoleName(roleAddVO.getName());
} catch (Exception e) {
return ResultUtil.error(ErrorCode.CLASS_COPY_EXCEPTION);
}
} else { } else {
return ResultUtil.error(ErrorCode.ROLE_NAME_REPEAT); return ResultUtil.error(ErrorCode.ROLE_NAME_REPEAT);
} }

View File

@ -1,7 +1,7 @@
package com.jsl.oa.services.impl; package com.jsl.oa.services.impl;
import com.jsl.oa.dao.UserDAO; 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.mapper.RoleMapper;
import com.jsl.oa.model.doData.RoleUserDO; import com.jsl.oa.model.doData.RoleUserDO;
import com.jsl.oa.model.doData.UserCurrentDO; import com.jsl.oa.model.doData.UserCurrentDO;
@ -44,13 +44,13 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
public BaseResponse userLock(HttpServletRequest request, Long id,Long isLock) { public BaseResponse userLock(HttpServletRequest request, Long id, Long isLock) {
if (!Processing.checkUserIsAdmin(request, roleMapper)) { if (!Processing.checkUserIsAdmin(request, roleMapper)) {
return ResultUtil.error(ErrorCode.NOT_ADMIN); return ResultUtil.error(ErrorCode.NOT_ADMIN);
} }
//判断用户是否存在 //判断用户是否存在
if (userDAO.isExistUser(id)) { if (userDAO.isExistUser(id)) {
userDAO.userLock(id,isLock); userDAO.userLock(id, isLock);
return ResultUtil.success("更改成功"); return ResultUtil.success("更改成功");
} else return ResultUtil.error(ErrorCode.USER_NOT_EXIST); } else return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
} }
@ -158,14 +158,14 @@ public class UserServiceImpl implements UserService {
userDO.setPassword(null); userDO.setPassword(null);
return ResultUtil.success("添加用户成功", userDO); return ResultUtil.success("添加用户成功", userDO);
} else { } else {
throw new BusinessException(ErrorCode.DATABASE_INSERT_ERROR); return ResultUtil.error(ErrorCode.DATABASE_INSERT_ERROR);
} }
} else return ResultUtil.error(ErrorCode.USER_EXIST); } else return ResultUtil.error(ErrorCode.USER_EXIST);
} }
@Override @Override
public BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request) { public BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request) throws ClassCopyException {
//检测用户是否为管理员 //检测用户是否为管理员
BaseResponse checkManagerResult = isManager(request); BaseResponse checkManagerResult = isManager(request);
if (checkManagerResult.getCode() != 200) { if (checkManagerResult.getCode() != 200) {
@ -179,11 +179,7 @@ public class UserServiceImpl implements UserService {
} }
//修改非空属性 //修改非空属性
try {
Processing.copyProperties(userEditVo, userDO); Processing.copyProperties(userEditVo, userDO);
} catch (Exception e) {
return ResultUtil.error(ErrorCode.CLASS_COPY_EXCEPTION);
}
//向数据库中修改属性 //向数据库中修改属性
userDAO.userEdit(userDO); userDAO.userEdit(userDO);
@ -192,15 +188,11 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
public BaseResponse userProfileGet(HttpServletRequest request) { public BaseResponse userProfileGet(HttpServletRequest request) throws ClassCopyException {
// 获取用户Id // 获取用户Id
UserDO userDO = userDAO.getUserById(Processing.getAuthHeaderToUserId(request)); UserDO userDO = userDAO.getUserById(Processing.getAuthHeaderToUserId(request));
UserProfile userProfile = new UserProfile(); UserProfile userProfile = new UserProfile();
try {
Processing.copyProperties(userDO, userProfile); Processing.copyProperties(userDO, userProfile);
} catch (Exception e) {
return ResultUtil.error(ErrorCode.CLASS_COPY_EXCEPTION);
}
userProfile.setSex(Processing.getSex(userDO.getSex())); userProfile.setSex(Processing.getSex(userDO.getSex()));
return ResultUtil.success(userProfile); return ResultUtil.success(userProfile);
} }

View File

@ -1,5 +1,6 @@
package com.jsl.oa.utils; package com.jsl.oa.utils;
import com.jsl.oa.exception.ClassCopyException;
import com.jsl.oa.mapper.RoleMapper; import com.jsl.oa.mapper.RoleMapper;
import com.jsl.oa.model.doData.RoleDO; import com.jsl.oa.model.doData.RoleDO;
import com.jsl.oa.model.doData.RoleUserDO; import com.jsl.oa.model.doData.RoleUserDO;
@ -182,10 +183,11 @@ public class Processing {
* @Param source: * @Param source:
* @Param dest: * @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<?> sourceClass = source.getClass();
Class<?> targetClass = target.getClass(); Class<?> targetClass = target.getClass();
try {
Field[] sourceFields = sourceClass.getDeclaredFields(); Field[] sourceFields = sourceClass.getDeclaredFields();
for (Field sourceField : sourceFields) { for (Field sourceField : sourceFields) {
String fieldName = sourceField.getName(); String fieldName = sourceField.getName();
@ -217,8 +219,10 @@ public class Processing {
targetField.set(target, value); targetField.set(target, value);
} }
} catch (IllegalAccessException e) {
return target; throw new ClassCopyException(ErrorCode.CLASS_COPY_EXCEPTION);
}
return null;
} }
/** /**