<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
如果新增一個資料,直接在前端頁面新增,由於前端程式碼中有設定資料不能為空,所以不會傳入空值。但是不通過前端頁面新增一個資料時,比如使用swagger,直接存取後端時,當某個值為空時,可能會被傳進資料庫,這就會造成一些問題。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> <version>2.3.2.RELEASE</version> </dependency>
實體類上:
每個分組都要建立一個對應的介面:
controller層開啟分組校驗:
@Validated註解裡面支援多個分組。
@Valid註解不支援分組校驗
import com.seckill.validator.IsMobileValidator; import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*; @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Constraint( validatedBy = {IsMobileValidator.class} ) public @interface IsMobile { // 預設為true boolean required() default true; String message() default "手機號碼格式錯誤"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
import org.thymeleaf.util.StringUtils; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Description:手機號碼校驗 * Date: 2022/6/28 15:28 **/ public class PhoneNumberValidator { // 正規表示式 private static final Pattern mobile_pattern=Pattern.compile("^1(3[0-9]|5[0-3,5-9]|7[0-3,5-8]|8[0-9])\d{8}$"); public static boolean isMobile(String mobile){ if(StringUtils.isEmpty(mobile)){ return false; } Matcher matcher = mobile_pattern.matcher(mobile); return matcher.matches(); } }
import com.seckill.annotations.IsMobile; import com.seckill.utils.PhoneNumberValidator; import org.thymeleaf.util.StringUtils; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; /** * Description:自定義校驗規則 * Date: 2022/6/28 16:59 **/ public class IsMobileValidator implements ConstraintValidator<IsMobile,String> { private boolean required=false; @Override public void initialize(IsMobile constraintAnnotation) { //先獲取到填的值 true/false required=constraintAnnotation.required(); } @Override public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) { // 判斷是否為必填 if(required){ //必填 return PhoneNumberValidator.isMobile(s); }else { //非必填 if(StringUtils.isEmpty(s)){ //非必填時填的值為空時 return true; }else{ //非必填時填的值不為空時 return PhoneNumberValidator.isMobile(s); } } } }
/** * Description:全域性例外處理類 * Date: 2022/6/28 17:35 **/ @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseBean ExceptionHandler(Exception e){ if(e instanceof GlobalException){ GlobalException ex= (GlobalException) e; return ResponseBean.error(ex.getResponseBeanEnum()); // 處理引數校驗丟擲的異常 BindException }else if(e instanceof BindException){ BindException ex= (BindException) e; ResponseBean res=ResponseBean.error(ResponseBeanEnum.BINDING_ERROR); res.setMessage("引數校驗異常:"+ex.getAllErrors().get(0).getDefaultMessage()); return res; } return ResponseBean.error(ResponseBeanEnum.ERROR); } }
在屬性上使用這個註解:
/** 選手聯絡電話 */ @IsMobile(message = "聯絡電話格式不正確") @NotNull(message = "手機號不能為空") @Excel(name = "選手聯絡電話") private String phoneNumber;
然後在Controller類上或者方法傳入的引數前加@Validated或@Valid註解來開啟引數校驗。
controller層:
加上@Validated
@PostMapping public AjaxResult addInfo(@RequestBody @Validated TeamInfoDto teamInfoDto) { return toAjax(comTeamService.insert(teamInfoDto)); }
實體類中:
在要校驗的集合屬性上加@Valid這個註解,否則它只會校驗這個集合中元素是否為空,不會校驗集合中各個元素
@Data public class TeamInfoDto { @NotEmpty(message = "選手資訊不能為空") @Valid private List<ComUser> user; }
對集合中元素資料的限制設定:
在ComUser實體類中:
在想要校驗的屬性上加上對應註解
public class ComUser extends BaseEntity { private static final long serialVersionUID = 1L; private Long id; /** 選手姓名 */ @NotNull(message = "姓名不能為空") private String name; /** 選手聯絡電話 */ @NotNull(message = "手機號不能為空") @IsMobile(message = "手機格式不正確") private String phoneNumber; /** 郵箱 */ @NotEmpty(message = "郵箱不能為空") private String email; }
到此這篇關於SpringBoot後端資料校驗的文章就介紹到這了,更多相關SpringBoot後端資料校驗內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45