[server] 修复bug

This commit is contained in:
zeaslity
2023-02-17 16:24:31 +08:00
parent 9197efc4ec
commit 3c42fff6cf
7 changed files with 154 additions and 59 deletions

View File

@@ -42,14 +42,23 @@ public class GlobalExceptionHandler {
public R<Object> MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
// 从异常对象中拿到ObjectError对象获取所有的错误信息
List<ObjectError> objectError = e.getBindingResult().getAllErrors();
List<ObjectError> objectError = e
.getBindingResult()
.getAllErrors();
// 然后提取错误提示信息进行返回
HashMap<Integer, String> errorMap = new HashMap<>();
objectError.forEach(objectError1 -> errorMap.put(objectError.indexOf(objectError1), objectError1.getDefaultMessage()));
objectError.forEach(objectError1 -> errorMap.put(
objectError.indexOf(objectError1),
objectError1.getDefaultMessage()
));
// 使用标准化返回体返回数据
return R.resetResult(ResultStat.VALIDATE_FAILED.getCode(), ResultStat.VALIDATE_FAILED.getDescription(), errorMap);
return R.resetResult(
ResultStat.VALIDATE_FAILED.getCode(),
ResultStat.VALIDATE_FAILED.getDescription(),
errorMap
);
//return errorMap;
}
@@ -62,14 +71,22 @@ public class GlobalExceptionHandler {
//按需重新封装需要返回的错误信息
Map<String, String> invalidMap = new LinkedHashMap(99);
//解析原错误信息,封装后返回,此处返回非法的字段名称,原始值,错误信息
invalidMap.put(exception.getParameter().getParameterName(), ResultStat.PARAM_ERROR.getDescription());
invalidMap.put(
exception
.getParameter()
.getParameterName(),
ResultStat.PARAM_ERROR.getDescription()
);
R<Map<String, String>> vo = new R<>();
vo.setCode(ResultStat.PARAM_ERROR.getCode());
vo.setMsg(getLocaleMsg(ResultStat.PARAM_ERROR.getDescription()));
vo.setData(invalidMap);
log.debug(exception.getMessage(), exception);
log.debug(
exception.getMessage(),
exception
);
return vo;
}
@@ -93,7 +110,10 @@ public class GlobalExceptionHandler {
vo.setData("数据库异常,操作失败!");
}
log.debug(exception.getMessage(), exception);
log.debug(
exception.getMessage(),
exception
);
return vo;
}
@@ -104,12 +124,18 @@ public class GlobalExceptionHandler {
R<Object> R = new R<>();
ResultStat status = exception.getStatus();
if (status != null) {
R.setMsg(getLocaleMsg(exception.getMessage(), exception.getParams()));
R.setMsg(getLocaleMsg(
exception.getMessage(),
exception.getParams()
));
R.setCode(status.getCode());
R.setData(exception.getData());
} else {
R.setCode(ResultStat.FAILED.getCode());
R.setMsg(getLocaleMsg(exception.getMessage(), exception.getParams()));
R.setMsg(getLocaleMsg(
exception.getMessage(),
exception.getParams()
));
R.setData(null);
}
return R;
@@ -136,20 +162,34 @@ public class GlobalExceptionHandler {
//解析原错误信息,封装后返回,此处返回非法的字段名称,原始值,错误信息
if (exception != null) {
List<FieldError> fieldErrors = exception.getBindingResult().getFieldErrors();
fieldErrors.stream().sorted(Comparator.comparing(FieldError::getCode)).forEach(error -> {
String defaultMessage = error.getDefaultMessage();
String finalMessage = defaultMessage;
if (defaultMessage != null && defaultMessage.startsWith("{") && defaultMessage.endsWith("}")) {
finalMessage = messageSource.getMessage(defaultMessage.substring(1, defaultMessage.length() - 1));
}
List<FieldError> fieldErrors = exception
.getBindingResult()
.getFieldErrors();
fieldErrors
.stream()
.sorted(Comparator.comparing(FieldError::getCode))
.forEach(error -> {
String defaultMessage = error.getDefaultMessage();
String finalMessage = defaultMessage;
if (defaultMessage != null && defaultMessage.startsWith("{") && defaultMessage.endsWith("}")) {
finalMessage = messageSource.getMessage(defaultMessage.substring(
1,
defaultMessage.length() - 1
));
}
if (StringUtils.isNotEmpty(invalidMap.get(error.getField()))) {
invalidMap.put(error.getField(), invalidMap.get(error.getField()) + "," + finalMessage);
} else {
invalidMap.put(error.getField(), finalMessage);
}
});
if (StringUtils.isNotEmpty(invalidMap.get(error.getField()))) {
invalidMap.put(
error.getField(),
invalidMap.get(error.getField()) + "," + finalMessage
);
} else {
invalidMap.put(
error.getField(),
finalMessage
);
}
});
}
R<Map<String, String>> vo = new R<>();
@@ -157,7 +197,10 @@ public class GlobalExceptionHandler {
vo.setMsg(getLocaleMsg(ResultStat.VALIDATE_FAILED.getDescription()));
vo.setData(invalidMap);
log.debug(exception.getMessage(), exception);
log.debug(
exception.getMessage(),
exception
);
return vo;
@@ -168,7 +211,10 @@ public class GlobalExceptionHandler {
*/
@ExceptionHandler(value = Exception.class)
public Object exceptionHandel(Exception e) {
return getResponseVO(e, getLocaleMsg("系统错误,请联系管理员"));
return getResponseVO(
e,
getLocaleMsg("系统错误,请联系管理员")
);
}
private Object getResponseVO(Exception e, String msg) {
@@ -176,12 +222,20 @@ public class GlobalExceptionHandler {
R.setCode(ResultStat.FAILED.getCode());
R.setMsg(msg);
R.setMsg(e.getMessage());
log.error(e.getMessage(), e);
// 此处修改不要打印 错误 e
log.error(
e.getMessage(),
e
);
return R;
}
private String getLocaleMsg(String msgCode, Object... params) {
return messageSource.getMessage(msgCode, params);
return messageSource.getMessage(
msgCode,
params
);
}
}

View File

@@ -47,7 +47,9 @@ public class FunctionReader {
try {
// 构造一个 buffered Reader
BufferedReader bufferedReader = new BufferedReader(new StringReader(functionContent));
BufferedReader bufferedReader = new BufferedReader(
new StringReader(functionContent)
);
// 执行read操作
result = doReadContent(
@@ -63,6 +65,14 @@ public class FunctionReader {
}
/**
* 实际解析从前端传入的 脚本命令, 将其转换为 List<List<String>>
*
* @param result
* @param bufferedReader
* @return
* @throws IOException
*/
private static List<List<String>> doReadContent(List<List<String>> result, BufferedReader bufferedReader) throws IOException {
String line = bufferedReader.readLine();
@@ -73,7 +83,7 @@ public class FunctionReader {
while (line != null) {
if (!StringUtils.isEmpty(line)) {
result.add(SplitLineToCommandList(line));
result.add(SplitSpaceIndentToCommandList(line));
}
line = bufferedReader.readLine();
}
@@ -81,10 +91,25 @@ public class FunctionReader {
return result;
}
public static List<String> SplitLineToCommandList(String commandLine) {
public static List<String> SplitSpaceIndentToCommandList(String commandLine) {
return Arrays
.stream(commandLine.split(" "))
.stream(commandLine
.split(" "))
.collect(Collectors.toList());
}
public static List<String> SplitCommaIndentToCommandList(String commandLine) {
// 需要进行归一化,去除掉多余的空格
return Arrays
.stream(commandLine.split(","))
.map(
split -> split.replace(
" ",
""
)
)
.collect(Collectors.toList());
}