"新增数据重复" 的全局处理(数据库索引)

2019-05-07  本文已影响0人  墨色尘埃

新增数据重复
将重复的字段定义成索引,key为自定义(图中为"专业名称")。如果新增了一条重复的数据会抛出DuplicateKeyException异常,在log日志类捕获异常,并取出有用信息返回给前端。
这样就避免了在代码里一条一条去查找。

image.png
catch (DuplicateKeyException throwable) {
            String currentTag = "E" + new Date().getTime();
            logger.error(sb.toString() + "\n" + "EXCEPTION{" + currentTag + "}:" + throwable.getMessage(), throwable);
            if (throwable.getMessage() != null) {
                if (throwable.getMessage().contains("for key")) {
                    Matcher matcher = getDuplicateKeyPattern().matcher(throwable.getMessage());
                    if (matcher.find()) {
                        String dataDetail = matcher.group(1);
                        String entryKey = matcher.group(2);
                        return new ResponseObj<>(null, new RetCode("9990", entryKey + "存在重复数据,数据为"+dataDetail+ ",请修改后重试", currentTag));
                    }
                }
            }
            return new ResponseObj<>(null, RetCode.FAILECHO);
        }
    Pattern duplicateKeyPattern = null;

    public Pattern getDuplicateKeyPattern() {
        if (duplicateKeyPattern == null) {
            String pattern = "Duplicate entry '(\\S+)' for key '(\\S+)'";
            duplicateKeyPattern = Pattern.compile(pattern);
        }
        return duplicateKeyPattern;
    }

字段校验
输入的信息过长超过了表里限制的长度,会报MysqlDataTruncation异常,不过这里就不使用上面“数据重复”的方式来返回信息给前端。Spring Boot使用校验框架validation校验
【第十四篇: Spring Boot使用校验框架validation校验】
springboot2.0-统一处理返回结果和异常情况

上一篇下一篇

猜你喜欢

热点阅读