美文网首页
JSR 303 校验注解

JSR 303 校验注解

作者: AGEGG | 来源:发表于2023-04-10 11:02 被阅读0次

    1.JSR 303 校验注解

    1.给Bean添加校验注解javax.validation.constraints

        /**
         * 品牌名
         */
        @NotBlank(message = "品牌名必须提交")
        private String name;
    

    2.开启校验功能 @Valid

        /**
         * 保存
         */
        @RequestMapping("/save")
        public R save(@Valid @RequestBody BrandEntity brand){
            brandService.save(brand);
            return R.ok();
        }
    

    3.给校验的bean后紧跟一个BindingResult,就可以获取到校验的结果

        /**
         * 保存
         */
        @RequestMapping("/save")
        public R save(@Valid @RequestBody BrandEntity brand, BindingResult result){
            if (result.hasErrors()) {
                Map<String, String> map = new HashMap<>();
                // 获取校验错误结果
                result.getFieldErrors().forEach((item) -> {
                    // 获取错误信息
                    String message = item.getDefaultMessage();
                    // 获取字段名
                    String field = item.getField();
                    map.put(field, message);
                });
                return R.error(400, "提交的数据不合法").put("data", map);
    
            } else {
                brandService.save(brand);
            }
    
            return R.ok();
        }
    

    2.集中处理异常

    package com.agegg.gulimall.product.exception;
    
    import com.agegg.common.exception.BizCodeEnum;
    import com.agegg.common.utils.R;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.MethodArgumentNotValidException;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 集中处理所有异常
     */
    @Slf4j
    @RestControllerAdvice(basePackages = "com.agegg.gulimall.product.controller")
    public class GulimallExceptionControllerAdvice {
    
    
        @ExceptionHandler(value = MethodArgumentNotValidException.class)
        public R handleVaildException(MethodArgumentNotValidException e) {
            log.error("数据效验出现问题{},异常类型{}", e.getMessage(), e.getClass());
            BindingResult result = e.getBindingResult();
            Map<String, String> map = new HashMap<>();
            // 获取校验错误结果
            result.getFieldErrors().forEach((item) -> {
                // 获取错误信息
                String message = item.getDefaultMessage();
                // 获取字段名
                String field = item.getField();
                map.put(field, message);
            });
    
            return R.error(BizCodeEnum.VAILD_EXCEPTION.getCode(), BizCodeEnum.VAILD_EXCEPTION.getMessage()).put("data", map);
        }
    
        @ExceptionHandler(value = Throwable.class)
        public R handleException(Throwable throwable) {
            log.error("出现问题{},异常类型{}", throwable.getMessage(), throwable.getClass());
            return R.error(BizCodeEnum.UNKNOW_EXCEPTION.getCode(), BizCodeEnum.UNKNOW_EXCEPTION.getMessage());
        }
    
    }
    
    

    3. 分组校验

    4.自定义校验

    相关文章

      网友评论

          本文标题:JSR 303 校验注解

          本文链接:https://www.haomeiwen.com/subject/tpniddtx.html