feat(dependency): 添加Redisson依赖并优化全局异常处理

- 在nflg-wms-srm-receive模块中添加Redisson分布式锁依赖
- 在GlobalRestControllerAdvice中重构异常日志记录方式,统一使用printLog方法
- 引入ExceptionUtil工具类增强异常堆栈信息输出
- 在TestController中添加业务异常测试接口用于验证异常处理逻辑
- 修复DeploySitTest中字符串截取方法的参数间距问题
This commit is contained in:
曹鹏飞 2026-03-24 14:08:36 +08:00
parent b70c7c19ee
commit 66c2b31255
4 changed files with 27 additions and 9 deletions

View File

@ -5,10 +5,12 @@ import com.nflg.wms.admin.service.SapService;
import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.dto.LdapDepartmentDTO;
import com.nflg.wms.common.pojo.dto.LdapUserDTO;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.service.ILanguageService;
import com.nflg.wms.starter.BaseController;
import com.sap.conn.jco.JCoException;
import jakarta.annotation.Resource;
import jakarta.validation.metadata.ValidateUnwrappedValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -76,4 +78,10 @@ public class TestController extends BaseController {
String ids=basdeSerialNumberControllerService.generateSerialNumber(0);
return ApiResult.success(ids);
}
@GetMapping("/businessError")
public void testThrowBusinessError() throws Exception {
int a=0;
Integer b =100/a;
}
}

View File

@ -38,6 +38,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.52.0</version>
</dependency>
<dependency>
<groupId>com.sap.conn.jco</groupId>
<artifactId>sapjco3</artifactId>

View File

@ -79,7 +79,7 @@ public class DeploySitTest {
}
private String getRemoteFileMD5(SSHUtil sshUtil, String remotePath) throws Exception {
String md5 = StrUtil.subPre(sshUtil.execWithReturn("md5sum " + remotePath),32);
String md5 = StrUtil.subPre(sshUtil.execWithReturn("md5sum " + remotePath), 32);
printInfo("远程文件MD5为" + md5);
return md5;
}

View File

@ -1,6 +1,7 @@
package com.nflg.wms.starter.advice;
import cn.dev33.satoken.exception.NotLoginException;
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.util.StrUtil;
import com.nflg.wms.common.constant.Constant;
import com.nflg.wms.common.constant.STATE;
@ -31,30 +32,30 @@ public class GlobalRestControllerAdvice {
@ExceptionHandler(Exception.class)
public ApiResult<Void> handleAllExceptions(Exception ex) {
log.error("服务器内部错误: ", ex);
printLog("服务器内部错误", ex);
return ApiResult.error(STATE.BusinessError, "服务器内部错误,错误号:" + MDC.get(Constant.TRACE_ID));
}
@ExceptionHandler(NflgException.class)
public ResponseEntity<Object> handleNflgException(NflgException ex) {
if (ex.getState() == STATE.LoginError) {
log.error("登录失效: ", ex);
printLog("登录失效", ex);
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(ex.getMsg());
} else {
log.error("业务错误: ", ex);
printLog("业务错误", ex);
return ResponseEntity.ok().body(ApiResult.error(ex.getState(), ex.getMsg()));
}
}
@ExceptionHandler(ConstraintViolationException.class)
public ApiResult<Void> handleConstraintViolationException(ConstraintViolationException ex) {
log.error("数据校验失败: ", ex);
printLog("数据校验失败", ex);
return ApiResult.error(STATE.ParamErr, "数据校验失败: " + StrUtil.join(",", ex.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.toList())));
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public ApiResult<Void> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
log.error("数据校验失败: ", ex);
printLog("数据校验失败", ex);
List<String> errors = new ArrayList<>();
ex.getBindingResult().getAllErrors().forEach(error -> {
String fieldName = ((FieldError) error).getField();
@ -73,19 +74,23 @@ public class GlobalRestControllerAdvice {
@ExceptionHandler(NoResourceFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public ApiResult<Void> handleNoResourceFoundException(NoResourceFoundException ex) {
log.error("请求的地址无效: ", ex);
printLog("请求的地址无效", ex);
return ApiResult.error(STATE.BusinessError, "请求的地址无效:" + ex.getResourcePath());
}
@ExceptionHandler(SAPException.class)
public ApiResult<Void> handleSAPException(SAPException ex) {
log.error("SAP错误: ", ex);
printLog("SAP错误", ex);
return ApiResult.error(ex.getState(), "SAP错误:" + ex.getMessage());
}
@ExceptionHandler(DataAlertException.class)
public ApiResult<Void> handleDataAlertException(DataAlertException ex) {
log.error("返回数据的错误: ", ex);
printLog("返回数据的错误", ex);
return ApiResult.errorWithExtras(ex.getState(), ex.getObj());
}
private void printLog(String msg, Throwable ex) {
log.error("{}:{},{}", msg, ex.getMessage(), ExceptionUtil.stacktraceToString(ex));
}
}