• springboot项目中的dto的参数校验及统一异常处理的简单使用


    springboot项目中的dto的参数校验以及统一异常处理

    依赖包

          <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-validationartifactId>
            <version>2.7.3version>
          dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    dto类中的注解

    根据下图可以看到有这么多的注解可以使用,就不一一列举了,挑两个常用的演示下
    在这里插入图片描述
    来一段dto中的代码

    @Data
    @ToString
    public class UmsMemberRegisterDTO {
        // 可以限制住该参数的位数
        @Size(min = 6, max = 16, message = "用户名6位到16位")
        private String username;
        @Size(min = 8, max = 16, message = "密码位数为8~16")
        private String password;
        private String icon;
        // 校验email格式
        @Email
        private String email;
        // 不能为空
        @NotEmpty
        private String nickName;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    controller中的修改

    只需要将参数中添加@Valid注解

    // 注册
        @PostMapping("/register")
        public ResultWrapper register(@RequestBody @Valid UmsMemberRegisterDTO umsMemberRegisterDTO){
            return umsMemberService.insertUmsMember(umsMemberRegisterDTO);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    其实现在已经起作用了,但是前端接收到的信息是报错信息如图:
    在这里插入图片描述
    说明第一个注解硬起作用了,返回400,bad request,那如何将这样的异常捕捉并且返回呢,继续往下看

    创建validate异常处理器

    创建一个处理器ValidateHandler 继承ResponseEntityExceptionHandler 重写handleMethodArgumentNotValid方法,如下:

    @RestControllerAdvice
    public class ValidateHandler extends ResponseEntityExceptionHandler {
    
        @Override
        protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
                                                                      HttpHeaders headers,
                                                                      HttpStatus status,
                                                                      WebRequest request) {
            StringBuilder stringBuilder = new StringBuilder();
            for (FieldError fieldError: ex.getBindingResult().getFieldErrors()){
                String defaultMessage = fieldError.getDefaultMessage();
                // 将异常字段的信息提取
                stringBuilder.append("  ").append(defaultMessage);
                break;
            }
            // 这段注释是对返回值进行了统一处理,为了简化,这段代码注释了,直接将异常信息封装到ResponseEntity返回
            // return new ResponseEntity(ResultWrapper.builder().code(301).msg(stringBuilder.toString()).build(),HttpStatus.OK);
            return new ResponseEntity(stringBuilder.toString(),HttpStatus.OK);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    现在的返回值就是一段字符串,如图:
    在这里插入图片描述
    当然也可以自己将结果封装下返回给前端,就是上面注释哪段代码,如图:
    在这里插入图片描述

  • 相关阅读:
    qt中对话框
    Flutter实现局部刷新的几种方式
    matlab常用了滤波函数小结
    计算机等级考试—信息安全三级真题九
    关于#区块链#的问题:怎么设置区块链系统黑名单,把node3设为黑名单禁止并通过控制台验证node3的Peers
    【Kafka从成神到升仙系列 四】你真的了解 Kafka 的缓存池机制嘛
    MongoDB文档(二)
    宏观经济学复习
    【Linux---06】远程登陆 「ssh登陆 | Xshell登陆 | 上传下载文件」
    JavaScript 浏览器元素滚动 scrollIntoView()
  • 原文地址:https://blog.csdn.net/weixin_47402482/article/details/127697641