feat(dependency): 添加Redisson依赖并优化全局异常处理
- 在nflg-wms-srm-receive模块中添加Redisson分布式锁依赖 - 在GlobalRestControllerAdvice中重构异常日志记录方式,统一使用printLog方法 - 引入ExceptionUtil工具类增强异常堆栈信息输出 - 在TestController中添加业务异常测试接口用于验证异常处理逻辑 - 修复DeploySitTest中字符串截取方法的参数间距问题
This commit is contained in:
parent
b70c7c19ee
commit
66c2b31255
|
|
@ -5,10 +5,12 @@ import com.nflg.wms.admin.service.SapService;
|
||||||
import com.nflg.wms.common.pojo.ApiResult;
|
import com.nflg.wms.common.pojo.ApiResult;
|
||||||
import com.nflg.wms.common.pojo.dto.LdapDepartmentDTO;
|
import com.nflg.wms.common.pojo.dto.LdapDepartmentDTO;
|
||||||
import com.nflg.wms.common.pojo.dto.LdapUserDTO;
|
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.repository.service.ILanguageService;
|
||||||
import com.nflg.wms.starter.BaseController;
|
import com.nflg.wms.starter.BaseController;
|
||||||
import com.sap.conn.jco.JCoException;
|
import com.sap.conn.jco.JCoException;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.validation.metadata.ValidateUnwrappedValue;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
@ -76,4 +78,10 @@ public class TestController extends BaseController {
|
||||||
String ids=basdeSerialNumberControllerService.generateSerialNumber(0);
|
String ids=basdeSerialNumberControllerService.generateSerialNumber(0);
|
||||||
return ApiResult.success(ids);
|
return ApiResult.success(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/businessError")
|
||||||
|
public void testThrowBusinessError() throws Exception {
|
||||||
|
int a=0;
|
||||||
|
Integer b =100/a;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -38,6 +38,11 @@
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-actuator</artifactId>
|
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.redisson</groupId>
|
||||||
|
<artifactId>redisson-spring-boot-starter</artifactId>
|
||||||
|
<version>3.52.0</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.sap.conn.jco</groupId>
|
<groupId>com.sap.conn.jco</groupId>
|
||||||
<artifactId>sapjco3</artifactId>
|
<artifactId>sapjco3</artifactId>
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@ public class DeploySitTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getRemoteFileMD5(SSHUtil sshUtil, String remotePath) throws Exception {
|
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);
|
printInfo("远程文件MD5为" + md5);
|
||||||
return md5;
|
return md5;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.nflg.wms.starter.advice;
|
package com.nflg.wms.starter.advice;
|
||||||
|
|
||||||
import cn.dev33.satoken.exception.NotLoginException;
|
import cn.dev33.satoken.exception.NotLoginException;
|
||||||
|
import cn.hutool.core.exceptions.ExceptionUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.nflg.wms.common.constant.Constant;
|
import com.nflg.wms.common.constant.Constant;
|
||||||
import com.nflg.wms.common.constant.STATE;
|
import com.nflg.wms.common.constant.STATE;
|
||||||
|
|
@ -31,30 +32,30 @@ public class GlobalRestControllerAdvice {
|
||||||
|
|
||||||
@ExceptionHandler(Exception.class)
|
@ExceptionHandler(Exception.class)
|
||||||
public ApiResult<Void> handleAllExceptions(Exception ex) {
|
public ApiResult<Void> handleAllExceptions(Exception ex) {
|
||||||
log.error("服务器内部错误: ", ex);
|
printLog("服务器内部错误", ex);
|
||||||
return ApiResult.error(STATE.BusinessError, "服务器内部错误,错误号:" + MDC.get(Constant.TRACE_ID));
|
return ApiResult.error(STATE.BusinessError, "服务器内部错误,错误号:" + MDC.get(Constant.TRACE_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExceptionHandler(NflgException.class)
|
@ExceptionHandler(NflgException.class)
|
||||||
public ResponseEntity<Object> handleNflgException(NflgException ex) {
|
public ResponseEntity<Object> handleNflgException(NflgException ex) {
|
||||||
if (ex.getState() == STATE.LoginError) {
|
if (ex.getState() == STATE.LoginError) {
|
||||||
log.error("登录失效: ", ex);
|
printLog("登录失效", ex);
|
||||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(ex.getMsg());
|
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(ex.getMsg());
|
||||||
} else {
|
} else {
|
||||||
log.error("业务错误: ", ex);
|
printLog("业务错误", ex);
|
||||||
return ResponseEntity.ok().body(ApiResult.error(ex.getState(), ex.getMsg()));
|
return ResponseEntity.ok().body(ApiResult.error(ex.getState(), ex.getMsg()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExceptionHandler(ConstraintViolationException.class)
|
@ExceptionHandler(ConstraintViolationException.class)
|
||||||
public ApiResult<Void> handleConstraintViolationException(ConstraintViolationException ex) {
|
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())));
|
return ApiResult.error(STATE.ParamErr, "数据校验失败: " + StrUtil.join(",", ex.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.toList())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExceptionHandler(MethodArgumentNotValidException.class)
|
@ExceptionHandler(MethodArgumentNotValidException.class)
|
||||||
public ApiResult<Void> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
|
public ApiResult<Void> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
|
||||||
log.error("数据校验失败: ", ex);
|
printLog("数据校验失败", ex);
|
||||||
List<String> errors = new ArrayList<>();
|
List<String> errors = new ArrayList<>();
|
||||||
ex.getBindingResult().getAllErrors().forEach(error -> {
|
ex.getBindingResult().getAllErrors().forEach(error -> {
|
||||||
String fieldName = ((FieldError) error).getField();
|
String fieldName = ((FieldError) error).getField();
|
||||||
|
|
@ -73,19 +74,23 @@ public class GlobalRestControllerAdvice {
|
||||||
@ExceptionHandler(NoResourceFoundException.class)
|
@ExceptionHandler(NoResourceFoundException.class)
|
||||||
@ResponseStatus(HttpStatus.NOT_FOUND)
|
@ResponseStatus(HttpStatus.NOT_FOUND)
|
||||||
public ApiResult<Void> handleNoResourceFoundException(NoResourceFoundException ex) {
|
public ApiResult<Void> handleNoResourceFoundException(NoResourceFoundException ex) {
|
||||||
log.error("请求的地址无效: ", ex);
|
printLog("请求的地址无效", ex);
|
||||||
return ApiResult.error(STATE.BusinessError, "请求的地址无效:" + ex.getResourcePath());
|
return ApiResult.error(STATE.BusinessError, "请求的地址无效:" + ex.getResourcePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExceptionHandler(SAPException.class)
|
@ExceptionHandler(SAPException.class)
|
||||||
public ApiResult<Void> handleSAPException(SAPException ex) {
|
public ApiResult<Void> handleSAPException(SAPException ex) {
|
||||||
log.error("SAP错误: ", ex);
|
printLog("SAP错误", ex);
|
||||||
return ApiResult.error(ex.getState(), "SAP错误:" + ex.getMessage());
|
return ApiResult.error(ex.getState(), "SAP错误:" + ex.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExceptionHandler(DataAlertException.class)
|
@ExceptionHandler(DataAlertException.class)
|
||||||
public ApiResult<Void> handleDataAlertException(DataAlertException ex) {
|
public ApiResult<Void> handleDataAlertException(DataAlertException ex) {
|
||||||
log.error("返回数据的错误: ", ex);
|
printLog("返回数据的错误", ex);
|
||||||
return ApiResult.errorWithExtras(ex.getState(), ex.getObj());
|
return ApiResult.errorWithExtras(ex.getState(), ex.getObj());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void printLog(String msg, Throwable ex) {
|
||||||
|
log.error("{}:{},{}", msg, ex.getMessage(), ExceptionUtil.stacktraceToString(ex));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue