SpringBoot优雅的校验参数 @Valid @ControllerAdvice

1.@Valid + @RequestBody+ @ControllerAdvice + @NotEmpty

 

 这里玩法很多,可以校验不同类型的属性 使用BindingResult校验参数_miaoao611的博客-CSDN博客

 

返回值Map/Json都可以,我最后是拼接xml

public class GlobalExceptionHandler {

    /**
     * 处理@Valid校验的数据
     * @param e
     * @return
     */
    @ExceptionHandler(value = {MethodArgumentNotValidException.class})
    public String MethodArgumentNotValidException(MethodArgumentNotValidException e) {
        String name = e.getParameter().getExecutable().getName();
        log.info("=========接口调用{}=========",name);
        BindingResult rs = e.getBindingResult();
        StringBuilder resultMsg =new StringBuilder();
        if (rs.hasErrors()) {
            List<FieldError> fieldErrors = rs.getFieldErrors();
            fieldErrors.forEach(fieldError -> {
                resultMsg.append(fieldError.getDefaultMessage()).append(",");
                //这里可以放入Map,最后return map;
                log.error("error field is : {} ,message is : {}", fieldError.getField(), fieldError.getDefaultMessage());
            });
        }
        return StitchingResult.errorResult(resultMsg.deleteCharAt(resultMsg.length() - 1).toString());
    }
}

效果:

null和空字符串都会被拦截

 

 

 2.@NotBlank + @RequestParam + @Validated

 空字符串不会被拦截

Controller类加@Validated 注解

 

/**
     * 处理@NotBlank校验的数据
     * @param e
     * @return
     */
    @ExceptionHandler(value = {ConstraintViolationException.class})
    public String ConstraintViolationException(ConstraintViolationException e) {
        String excMsg = e.getMessage();
        String name = excMsg.substring(0,excMsg.indexOf("."));
        String msg = excMsg.substring(excMsg.indexOf(":")+1);
        String fieldName = excMsg.substring(excMsg.indexOf(".") + 1, excMsg.indexOf(":"));
        log.info("=========接口调用{}=========",name);
        log.error("error field is : {} ,message is : {}", fieldName, msg);
        return StitchingResult.errorResult(msg);
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值