开始

E:\学习中\Java架构师体系课:还原千万级项目从0到100全过程,技术&思维双提升-wjw\阶段一:单体电商项目架构,开发与上线(1~5周)\04.用户中心 ,订单\评价管理开发\第1章 用户中心-查询,编辑,验证用户信息

Spring Boot 优雅地实现接口参数校验
https://www.toutiao.com/i6896374306700395020/?tt_from=mobile_qq&utm_campaign=client_share&timestamp=1614815270&app=news_article&utm_source=mobile_qq&utm_medium=toutiao_android&use_new_style=1&req_id=202103040747500101351630741B1E6671&share_token=5c0eba95-86b0-4c81-98d5-feada4fec0a4&group_id=6896374306700395020

用户信息,前端包含了一些验证
image.png
在后端也应该有。
搜索我们已经包含进来的hibernate的一个验证的包
image.png

在pom.xml内,右键maven
image.png

会出现一张所有依赖的一张大图。之前在讲日志的时候看过。
image.png

image.png

image.png

image.png

开始验证

用户昵称不为空
image.png
如果发生错误了,提示信息
image.png

image.png

image.png

正则

image.png

image.png
把中间这一段复制出来
image.pngimage.png

 @Pattern(regexp = "^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\\d{8})$", message = "手机号格式不正确")
    @ApiModelProperty(value="手机号", name="mobile", example="13999999999", required = false)
    private String mobile;

image.png

邮箱
image.png
也可以直接使用Email注解
image.png

性别

性别只能是 0、1、2这三种类型,所以这里用了Min和Max这两种类型。
image.png

controller

参数上加上@Valid注解。这样就表示去这样这个BO对象,。
image.png
验证BO就,肯定会包含一些错误信息。所有的错误信息都放在BindingResult里面,
image.png

image.png

 // 判断BindingResult 是否保存错误的验证信息,如果有,则直接return
        if(result.hasErrors()) {

        }

封装处理错误的方法,它是一个键值对。
image.png
image.png
image.png

 private Map<String,String> getErrors(BindingResult result) {
        Map<String,String> map=new HashMap<>();
        List<FieldError> errorList = result.getFieldErrors();
        for (FieldError error :
                errorList) {
            // 发生验证错误所对应的某一个属性
            String errorField = error.getField();
            // 验证错误的信息
            String errorMsg = error.getDefaultMessage();
            map.put(errorField,errorMsg);
        }
        return map;
    }

如果发生错误,返回errorMap
image.png

// 判断BindingResult 是否保存错误的验证信息,如果有,则直接return
        if(result.hasErrors()) {
            Map<String,String> errorMap=getErrors(result);
            return IMOOCJSONResult.errorMap(errorMap);
        }

测试

image.png
重启服务
因为我们前端本身已经包含了验证,所以这里我们测试后端,使用postman来测试
image.png

image.png

body里面我们传的是一个空的对象
http://localhost:8088/userInfo/update?userId=21011270605KYX8H
image.png
image.png
如果发生错误,我们抛出的就是501
image.png

image.png
把nickName赋值
image.png
数据库内的数据
image.png

测试真实姓名,长度不能超12位

image.png

image.png

{
    "nickname":"慕课网",
    "realname":"超级无敌长在线教育网站-imooc"
}

手机号

image.png

{
    "nickname":"慕课网",
    "realname":"超级无敌长在线教育网站-imooc",
    "mobile": "123456"
}

这里在后端就是一个map对象
image.png

邮箱

image.png

{
    "nickname":"慕课网",
    "realname":"超级无敌长在线教育网站-imooc",
    "mobile": "123456",
    "email": "abc"
}

合格的邮箱格式
image.png

性别

012都没有问题
image.png

image.png
大于2也是不正确的
image.png

数字的小数点问题

2.9通过了验证
image.png
如果前端传过来的是小数,这里会强制转换为小数类型
image.png
我们在这里把BO对象打印出来看看
image.png
重启后端服务 测试
访问请求
image.png
image.png

文档

提供了一份文档
image.png
这里包含了很多的注解
image.png

image.png
验证的controller
image.png
还需要加上BindingResult
image.png

结束