Spring Boot - 表单验证

SpringBoot提供了强大的表单验证功能,我们可以在实体类对象的参数上通过一系列的注解来指定具体的验证逻辑。

下面以kotlin代码来演示具体的验证实现,java中的实现基本相同。

前端控制器:StudentController.kt

@RestController
@RequestMapping(value = ["/student"])
class StudentController {
    @RequestMapping(value = [""])
    fun query(@Valid @RequestBody student: Student, bindingResult: BindingResult): Result {
        if (bindingResult.hasErrors()) {
            //包装参数验证错误提示
            return Result(false, bindingResult.fieldError!!.defaultMessage, null)
        }
        return Result(true, "ok", null)
    }
}

实体类:Student.kt

class Student : Serializable {
    var id: Long? = null
    @get:NotEmpty(message = "姓名不能为空")
    var name: String? = null
    var sex: Int? = null
    var age: Int? = null
}

统一的请求结果:Result.kt

data class Result(val success: Boolean, val message: String?, val data: T?)

通过上面的代码,我们设置了一项参数验证“姓名不能为空”。

请求参数符合要求时,响应结果如下:

{
    "success": true,
    "message": "ok",
    "data": null
}

请求参数验证不通过是,响应结果如下:

{
    "success": false,
    "message": "姓名不能为空",
    "data": null
}

通过在实体类字段添加参数验证相关注解的方式,我们避免了在代码里硬编码实现验证逻辑,也使得验证变得更清晰、简洁。

示例中仅使用了@NotEmpty注解,实际上SpringBoot支持的参数验证注解还有很多。下表展示了其它的参数验证相关注解。

注解 说明
@Null 只能为null
@NotNull 不能为null
@NotEmpty 不能为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 字符串不能未null且不能为空(包括""、" "等)
@AssertFalse 只能为false
@AssertTrue 只能为true
@DecimalMax(value) 只能为一个不大于指定值的数字
@DecimalMin(value) 只能为一个不小于指定值的数字
@Digits(integer,fraction) 只能为一个小数,且整数位数不超过integer,小数位数不超过fraction
@Email 必须符合邮箱格式
@Future 必须是一个将来的日期
@Max(value) 只能为一个不大于指定值的数字
@Min(value) 只能为一个不小于指定值的数字
@Past 必须是一个过去的日期
@Pattern(value) 必须符合指定的正则表达式
@Size(max,min) 字符长度必须在min到max之间

你可能感兴趣的:(Spring Boot - 表单验证)