Spring Boot Validation框架验证登录格式

【框架简介】

Spring Boot Validation是Spring Boot整合了Hibernate Validation的一个框架,其核心是Hibernate Validation,此框架的作用是检验客户端向服务器端提交的请求参数的基本格式是否合法

例如,当设计一个“登录”功能时,客户端可能需要向服务器端提交用户名、密码这2项数据,如果客户端没有提交用户名,或没有提交密码,这个请求必然是无效的,是不可能成功登录的,则服务器端应该直接响应一个错误信息,根本不需要连接数据库去验证用户信息是否正确!另外,如果客户端提交的用户名是例如a或(1个空格)这样的数据,很显然也是不合法的!此类对于数据的基本格式的检验,就可以通过Spring Boot Validation便捷的实现!

【需求】

使用Spring Boot框架实现用户登录(不关心如何验证用户名与密码),检验用户名和密码的基本格式。

【实现步骤】

使用Spring Boot工程,在创建过程中需要注意:

  1. 建议使用Spring Boot 2.5.x版本,如果已经没有此版本的选项,则选择2.6.x版本,非常不建议选择3.x.x版本
  2. 需要勾选Web > Spring WebIO > Validation这2个依赖项

在项目的cn.tedu.validation.demo包中创建UserController类,作为控制器类,并在其中添加处理登录的方法:

package cn.tedu.validation.demo;

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @RequestMapping("login")
    public String login(String username, String password){
        System.out.println("username = " + username+ ", password = " + password);
        return "ok!";
    }
}

接下来,可以启动项目,并通过 http://localhost:8080/login?username=root&password=1234 测试访问,你还可以修改网址中的用户名和密码的值,在IntelliJ IDEA的控制台上会显示你提交的用户名和密码

如果希望使用Spring Boot Validation验证请求参数的基本格式,应该将以上方法中接收的用户名和密码这2个数据封装起来,例如创建UserLoginDTO类,并在其中声明用户名和密码这2个属性,按照开发规范添加Setter & Getter方法,同时,为了便于查看数据,再生成toString方法,代码如下:

package cn.tedu.validation.demo;

import javax.validation.constraints.NotNull;

public class userLoginDTO {
    private String username;
    private  String password;

    @Override
    public String toString() {
        return "userLoginDTO{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

接下来,原本处理请求的方法的参数就可以由2个字符串改为以上这1个类的对象:

package cn.tedu.validation.demo;

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @RequestMapping("login")
    public String login(userLoginDTO userLoginDTO){
        System.out.println("userLoginDTO = " + userLoginDTO);
        return "ok!";
    }
}

当需要验证请求参数的基本格式时,需要在以上方法的参数之前添加@Valid@Validated注解(这2个注解是等效的),表示需要对此参数进行验证:

package cn.tedu.validation.demo;

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @RequestMapping("login")
    public String login(@Validated userLoginDTO userLoginDTO){
        System.out.println("userLoginDTO = " + userLoginDTO);
        return "ok!";
    }
}

接下来,在UserLoginDTO类的属性上,添加注解,以配置验证规则及出错时的提示文本,例如:

package cn.tedu.validation.demo;

import javax.validation.constraints.NotNull;

public class userLoginDTO {
    @NotNull(message = "登录失败")
    private String username;
    private  String password;

    @Override
    public String toString() {
        return "userLoginDTO{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

接下来,重新启动项目,提交一个没有用户名的请求,例如 http://localhost:8080/login?password=0000 ,则会提示错误,并且,在IntelliJ IDEA控制台可以看到:

 default message [登录失败]]

提示:与@NotNull相似的注解还有@NotBlank@NotEmpty,这几个是区别的:

  1. @NotNull:不允许为null值,如果客户端提交的参数中根本没有这一项,则视为null
  1. @NotBlank:不允许为空白值,空白值包括由若干个空格、TAB符等组成字符
  1. @NotEmpty:不允许为空字符串,即不允许是长度为0的字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值