Springboot校驗(yàn)工具類詳細(xì)代碼示例
校驗(yàn)工具類
這個(gè)實(shí)現(xià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 { /** * 是否是無效手機(jī)格式 * @param phone 要校驗(yàn)的手機(jī)號(hào) * @return true:符合,false:不符合 */ public static boolean isPhoneInvalid(String phone){ return mismatch(phone, RegexPatterns.PHONE_REGEX); } /** * 是否是無效郵箱格式 * @param email 要校驗(yàn)的郵箱 * @return true:符合,false:不符合 */ public static boolean isEmailInvalid(String email){ return mismatch(email, RegexPatterns.EMAIL_REGEX); } /** * 是否是無效驗(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ù)雜,前端傳遞來的是字符串,在service層才轉(zhuǎn)換成對(duì)象的時(shí)候,就只能自定義校驗(yàn)工具類了。
我寫了個(gè)demo,還是很好用的,不過需要手動(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
FluentMybatis實(shí)現(xiàn)mybatis動(dòng)態(tài)sql拼裝和fluent api語法
本文主要介紹了FluentMybatis實(shí)現(xiàn)mybatis動(dòng)態(tài)sql拼裝和fluent api語法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08關(guān)于replaceFirst使用時(shí)的注意事項(xiàng)
這篇文章主要介紹了關(guān)于replaceFirst使用時(shí)的注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03idea創(chuàng)建springboot項(xiàng)目和springcloud項(xiàng)目的詳細(xì)教程
這篇文章主要介紹了idea創(chuàng)建springboot項(xiàng)目和springcloud項(xiàng)目方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Springcloud Stream消息驅(qū)動(dòng)工具使用介紹
SpringCloud Stream由一個(gè)中間件中立的核組成,應(yīng)用通過SpringCloud Stream插入的input(相當(dāng)于消費(fèi)者consumer,它是從隊(duì)列中接收消息的)和output(相當(dāng)于生產(chǎn)者producer,它是發(fā)送消息到隊(duì)列中的)通道與外界交流2022-09-09SpringBoot使用WebSocket實(shí)現(xiàn)前后端交互的操作方法
springboot使用websocket有兩種方式,一種是實(shí)現(xiàn)簡單的websocket,另外一種是實(shí)現(xiàn)STOMP協(xié)議,本篇講述如何使用springboot實(shí)現(xiàn)簡單的websocket,需要的朋友可以參考下2022-04-04Java Object定義三個(gè)點(diǎn)實(shí)現(xiàn)代碼
這篇文章主要介紹了Java Object定義三個(gè)點(diǎn)實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Java后端SSM框架圖片上傳功能實(shí)現(xiàn)方法解析
這篇文章主要介紹了Java后端SSM框架圖片上傳功能實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06