架构师

您现在的位置是:首页 > 技术博客 > 编程基础

编程基础

Springboot集成validation校验API参数的合法性

架构师小跟班 2020-05-12 编程基础
前言:validation主要用于校验用户提交的数据的合法性,比如字符长度,是否为空,密码是否符合规则,邮箱格式是否正确等等,市场上校验框架比较多,用的比较广泛的是hibernate-validator,

前言:

validation主要用于校验用户提交的数据的合法性,比如字符长度,是否为空,密码是否符合规则,邮箱格式是否正确等等,市场上校验框架比较多,用的比较广泛的是hibernate-validator, 既支持国际化,也支持自定义校验类型的注解,这里简单的演示校验框架在Springboot中如何集成。

第一步:添加pom依赖

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

第二步:添加实体类代码(注意:实体类中一定要加get/set方法,或lombok的@Data注解,否则controller中的register()方法拿到参数后无法赋值给User对象

package com.ryi.rpcs.test;

import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.*;

/**
 * 用户实体类
 * https://www.jiagou1216.com
 */
@Data
public class User {
    private Long id;
    @NotBlank
    @Length(min = 3, max = 10)
    private String username;
    @NotBlank
    @Email
    private String email;
    @NotBlank
    @Pattern(regexp = "^((13[0-9])|(15[^4,\\D])|(18[0,3-9]))\\d{8}$", message = "手机号格式不正确")
    private String phone;
    @Min(value = 18)
    @Max(value = 200)
    private int age;
    @NotBlank
    @Length(min = 6, max = 12, message = "昵称长度为6到12位")
    private String url;
}

第三步:添加controller控制类

package com.ryi.rpcs.test;

import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

/**
 * 控制类
 *
 * @author 架构师小跟班
 */
@RestController
@RequestMapping("/demo")
public class DemoController {
    @PostMapping("/user")
    public String register(@Valid @RequestBody User user, BindingResult result) {
        if (result.hasErrors()) {
            FieldError fieldError = result.getFieldError();
            String field = fieldError.getField();
            String msg = fieldError.getDefaultMessage();
            return field + ":" + msg;
        }
        System.out.println("success...");
        return "success";
    }
}

第四步:使用postman测试,选择post方法,请求URL:localhost:8080/demo/user

拓展阅读:

常用的约束注解

@Null 被注释的元素必须为 null

@NotNull 被注释的元素必须不为 null

@AssertTrue 被注释的元素必须为 true

@AssertFalse 被注释的元素必须为 false

@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@Size(max=, min=) 被注释的元素的大小必须在指定的范围内

@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内

@Past 被注释的元素必须是一个过去的日期

@Future 被注释的元素必须是一个将来的日期

@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

Hibernate Validator 附加的 constraint

@NotBlank(message =) 验证字符串非null,且长度必须大于0

@Email 被注释的元素必须是电子邮箱地址

@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内

@NotEmpty 被注释的字符串的必须非空

@Range(min=,max=,message=) 被注释的元素必须在合适的范围内

@URL(protocol=,host=, port=, regexp=, flags=) 被注释的字符串必须是一个有效的url

@CreditCardNumber 被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性

@ScriptAssert(lang=, script=, alias=) 要有Java Scripting API 即JSR 223 (“Scripting for the JavaTM Platform”)的实现

@SafeHtml(whitelistType=, additionalTags=) classpath中要有jsoup包


文章评论