继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第12天 接口参数的校验

userqiao
关注TA
已关注
手记 35
粉丝 1
获赞 3

课程名称:Spring Cloud 进阶 Alibaba 微服务体系自媒体实战
课程章节: 第3章 开发通行证有关服务
主讲老师: 风间影月

课程内容

在本节课程的学习过程当中,注册登录需要验证BO实体的信息。而在项目当中,使用到了JSR303注解接口校验。

对于一些封装的BO对象数据,可以通过一些注解进行校验,如下:PassportControllerApi.java。

启动校验的注解为:@Valid

@PostMapping("/doLogin")
@ApiOperation(value = "一键注册登录接口", notes = "一键注册登录接口", httpMethod = "POST")
public GraceJSONResult doLogin(HttpServletRequest request,
                               HttpServletResponse response,
                               @RequestBody @Valid RegisterLoginBO registerLoginBO,
                               BindingResult result);

PassportController.java

public GraceJSONResult doLogin(HttpServletRequest request,
                                   HttpServletResponse response,
                                   RegisterLoginBO registerLoginBO,
                                   BindingResult result) {

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

    // 获得前端传来的基本信息
    String smsCode = registerLoginBO.getSmsCode();
    String mobile = registerLoginBO.getMobile();

    // 0. 校验验证码是否匹配
    String redisSMSCode = redis.get(MOBILE_SMSCODE + mobile);
    if (StringUtils.isBlank(redisSMSCode) || !redisSMSCode.equalsIgnoreCase(smsCode)) {
        return GraceJSONResult.errorCustom(ResponseStatusEnum.SMS_CODE_ERROR);
    }

    return GraceJSONResult.ok();
}

验证的字段上方可以写一些相关的注解,系统识别后会自动检查RegisterLoginBO.java

public class RegisterLoginBO {

    @NotBlank(message = "手机号不能为空")
    private String mobile;
    @NotBlank(message = "短信验证码不能为空")
    private String smsCode;

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getSmsCode() {
        return smsCode;
    }

    public void setSmsCode(String smsCode) {
        this.smsCode = smsCode;
    }

    @Override
    public String toString() {
        return "RegisterLoginBO{" +
                "mobile='" + mobile + '\'' +
                ", smsCode='" + smsCode + '\'' +
                '}';
    }
}

如果校验有问题,那么可以直接获得并且放回给前端即可。

课程收获

JSR303校验

参数校验是我们程序开发中必不可少的过程。用户在前端页面上填写表单时,前端js程序会校验参数的合法性,当数据到了后端,为了防止恶意操作,保持程序的健壮性,后端同样需要对数据进行校验。后端参数校验最简单的做法是直接在业务方法里面进行判断,当判断成功之后再继续往下执行。但这样带给我们的是代码的耦合,冗余。当我们多个地方需要校验时,我们就需要在每一个地方调用校验程序,导致代码很冗余,且不美观。

导入依赖

创建SpringBoot项目时 会自动导入依赖在 spring-context-5.3.19.jar下面。

手动配置:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>


创建配置类,并在类上加@Validated注解,然后在属性上加上JSR-303定义的校验注解。具体的校验规则参考下表:

http://img.mukewang.com/6325e0ca0001b6d906400367.jpg

http://img2.mukewang.com/6325e0c200018c6a08620214.jpg

课程截屏

http://img1.mukewang.com/6325e10a0001f94b12700714.jpg

http://img.mukewang.com/6325e118000110f913450778.jpg

http://img1.mukewang.com/6325e1230001553a13300759.jpg


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP