Springboot校驗(yàn)工具類詳細(xì)代碼示例
校驗(yàn)工具類
這個(gè)實(shí)現(xiàn)邏輯很簡(jiǎn)單,就是調(diào)用string的正則表達(dá)式
我這里的代碼要導(dǎo)入糊涂工具包
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.17</version>
</dependency>
import cn.hutool.core.util.StrUtil;
public class RegexUtils {
/**
* 是否是無(wú)效手機(jī)格式
* @param phone 要校驗(yàn)的手機(jī)號(hào)
* @return true:符合,false:不符合
*/
public static boolean isPhoneInvalid(String phone){
return mismatch(phone, RegexPatterns.PHONE_REGEX);
}
/**
* 是否是無(wú)效郵箱格式
* @param email 要校驗(yàn)的郵箱
* @return true:符合,false:不符合
*/
public static boolean isEmailInvalid(String email){
return mismatch(email, RegexPatterns.EMAIL_REGEX);
}
/**
* 是否是無(wú)效驗(yàn)證碼格式
* @param code 要校驗(yàn)的驗(yàn)證碼
* @return true:符合,false:不符合
*/
public static boolean isCodeInvalid(String code){
return mismatch(code, RegexPatterns.VERIFY_CODE_REGEX);
}
// 校驗(yàn)是否不符合正則格式
private static boolean mismatch(String str, String regex){
if (StrUtil.isBlank(str)) {
return true;
}
return !str.matches(regex);
}
}
正則表達(dá)式常量類
public abstract class RegexPatterns {
/**
* 手機(jī)號(hào)正則
*/
public static final String PHONE_REGEX = "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$";
/**
* 郵箱正則
*/
public static final String EMAIL_REGEX = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
/**
* 密碼正則。4~32位的字母、數(shù)字、下劃線
*/
public static final String PASSWORD_REGEX = "^\\w{4,32}$";
/**
* 驗(yàn)證碼正則, 6位數(shù)字或字母
*/
public static final String VERIFY_CODE_REGEX = "^[a-zA-Z\\d]{6}$";
}附:自定義注解工具類
還有一些情況,如果業(yè)務(wù)邏輯實(shí)在比較復(fù)雜,前端傳遞來(lái)的是字符串,在service層才轉(zhuǎn)換成對(duì)象的時(shí)候,就只能自定義校驗(yàn)工具類了。
我寫(xiě)了個(gè)demo,還是很好用的,不過(guò)需要手動(dòng)調(diào)用校驗(yàn)方法
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.http.HttpStatus;
import javax.validation.*;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.util.Set;
/**
* @Author : wangbin
* @Date : 2023/2/16 14:49
* @Description:
*/
public class ValidationUtils {
public static void validate(@Valid Object user,Class<?> ... clazz) {
try (ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) {
Validator validator = factory.getValidator();
if(clazz==null){
clazz=new Class[0];
}
Set<ConstraintViolation<@Valid Object>> validateSet = validator.validate(user,clazz );
if (!CollectionUtils.isEmpty(validateSet)) {
String messages = validateSet.stream()
.map(ConstraintViolation::getMessage)
.reduce((m1, m2) -> m1 + ";" + m2)
.orElse("參數(shù)輸入有誤!");
throw DataImportException.httpError(HttpStatus.BAD_REQUEST,messages);
}
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
static class User {
@NotNull(message = "姓名不能為空",groups = ProcessInfoUpdateGroup.class)
private String name;
@Max(value = 200, message = "age不能超200")
@Min(value = 0, message = "age不能小于0",groups = ProcessInfoCreateGroup.class)
private Integer age;
}
public static void main(String[] args) {
User wb = new User(null, 201);
String s = com.alibaba.fastjson.JSON.toJSONString(wb);
User user = JSON.parseObject(s, User.class);
validate(user);
}
}總結(jié)
到此這篇關(guān)于Springboot校驗(yàn)工具類的文章就介紹到這了,更多相關(guān)Springboot校驗(yàn)工具類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot如何開(kāi)啟并使用郵件服務(wù)
這篇文章主要介紹了Spring Boot如何開(kāi)啟并使用郵件服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
自定義類加載器的父類為何是AppClassLoader說(shuō)明
這篇文章主要介紹了自定義類加載器的父類為何是AppClassLoader說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
Java 如何解析key為動(dòng)態(tài)的json操作
這篇文章主要介紹了Java 如何解析key為動(dòng)態(tài)的json操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Spring中@ConfigurationProperties的用法解析
這篇文章主要介紹了Spring中@ConfigurationProperties的用法解析,傳統(tǒng)的Spring一般都是基本xml配置的,后來(lái)spring3.0新增了許多java config的注解,特別是spring boot,基本都是清一色的java config,需要的朋友可以參考下2023-11-11
SpringBoot集成Knife4j/Swagger:接口文檔自動(dòng)生成,告別手寫(xiě)API文檔
本文將詳細(xì)講解SpringBoot如何快速集成Knife4j/Swagger,從環(huán)境搭建、基礎(chǔ)配置、接口注解使用,到進(jìn)階優(yōu)化,全程附完整代碼示例,感興趣的朋友跟隨小編一起看看吧2026-03-03
使用maven命令安裝jar包到本地倉(cāng)庫(kù)的方法步驟
這篇文章主要介紹了使用maven命令安裝jar包到本地倉(cāng)庫(kù)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
SpringBoot+Nacos+Kafka微服務(wù)流編排的簡(jiǎn)單實(shí)現(xiàn)
本文主要介紹了SpringBoot+Nacos+Kafka微服務(wù)流編排的簡(jiǎn)單實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08

