使用BindingResult来校验前端参数

目录

1.前端传递的实体属性中,需要校验的属性要打上注解。

2.controller中需要校验的实体类需要使用@Valid注解,和加入BindingResult的参数

3.判断BindingResult是否保存了错误的验证信息


如果要校验前端参数,如果没有使用注解的习惯,会在逻辑中写一些冗长的判断。

比如,校验前端参数是否为空:

    if (StringUtils.isBlank(vo.getMobile())) {
            return GraceJSONResult.errorMsg("手机号不能为空!");
        }

当需要校验的参数有很多的时候,代码就很冗长,校验注解配合BindingResult来使用会减少很多代码量。

步骤:

  1. 前端传递的实体属性中,需要校验的属性要打上注解。
  2. controller中需要校验的实体类需要使用@Valid注解,和加入BindingResult的参数
  3. 判断BindingResult是否保存了错误的验证信息,抽取的错误信息校验

1.前端传递的实体属性中,需要校验的属性要打上注解。

@Data
public class RegistLoginBO {
    @NotBlank(message = "手机号不能为空")
    private String mobile;
}

2.controller中需要校验的实体类需要使用@Valid注解,和加入BindingResult的参数

    public GraceJSONResult doLogin(@RequestBody @Valid RegistLoginBO registLoginBO,
                                   BindingResult result);

3.判断BindingResult是否保存了错误的验证信息

 @NotBlank(message = "手机号不能为空"),这是我们的一个属性需要的判断条件和错误提示,其他属性都会有类似的判断条件和提示,所以这部分可以做成map的格式。

BindingResult有一个getFieldErrors()方法来获取每个属性的错误提示,会返回一个List,遍历此list,把报错的属性和错误信息装进map。

    /**
     * 获取BO中的错误信息
     *
     * @param result
     */
    public Map<String, String> getErrors(BindingResult result) {
        Map<String, String> map = new HashMap<>();
        List<FieldError> errorList = result.getFieldErrors();
        for (FieldError error : errorList) {
            // 发送验证错误的时候所对应的某个属性
            String field = error.getField();
            // 验证的错误消息
            String msg = error.getDefaultMessage();
            map.put(field, msg);
        }
        return map;
    }

这个方法抽取出来以后可以复用,放在父类方法或者工具类中即可。

经过完善的代码就变成了:

        if (result.hasErrors()) {
            Map<String, String> map = getErrors(result);
            return GraceJSONResult.errorMap(map);
        }

常见的校验注解:

BindingResult的使用_乄浮生幽梦的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值