摘要:我們有時(shí)需要對前端傳過來的數(shù)據(jù)做校驗(yàn),就可以使用。他可以使我們不用在每個(gè)編寫校驗(yàn)代碼,可以達(dá)到解耦的功能。本文環(huán)境為,框架使用。
我們有時(shí)需要對前端傳過來的數(shù)據(jù)做校驗(yàn),就可以使用spring validation。他可以使我們不用在每個(gè)Controller編寫校驗(yàn)代碼,可以達(dá)到解耦的功能。本文環(huán)境為jdk8,框架使用springboot 2.1.0.RELEASE。
1.添加依賴
org.springframework.boot spring-boot-starter-validation
2.需要被校驗(yàn)的實(shí)體類
@Data public class LoginVo { @Size(min=6,max = 12,message = "用戶名不符合規(guī)范") String username; @NotBlank(message = "密碼不能為空") String password; }
3.Controller層,在參數(shù)Login前加上@Validated注解,表明需要spring對其進(jìn)行校驗(yàn)
public JSONResult registerOrLogin(@Validated LoginVo loginVo)
JSR提供的校驗(yàn)注解: @Null 被注釋的元素必須為 null @NotNull 被注釋的元素必須不為 null @AssertTrue 被注釋的元素必須為 true @AssertFalse 被注釋的元素必須為 false @Min(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值 @Max(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值 @DecimalMin(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值 @DecimalMax(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值 @Size(max=, min=) 被注釋的元素的大小必須在指定的范圍內(nèi) @Digits (integer, fraction) 被注釋的元素必須是一個(gè)數(shù)字,其值必須在可接受的范圍內(nèi) @Past 被注釋的元素必須是一個(gè)過去的日期 @Future 被注釋的元素必須是一個(gè)將來的日期 @Pattern(regex=,flag=) 被注釋的元素必須符合指定的正則表達(dá)式 Hibernate Validator提供的校驗(yàn)注解: @NotBlank(message =) 驗(yàn)證字符串非null,且長度必須大于0 @Email 被注釋的元素必須是電子郵箱地址 @Length(min=,max=) 被注釋的字符串的大小必須在指定的范圍內(nèi) @NotEmpty 被注釋的字符串的必須非空 @Range(min=,max=,message=) 被注釋的元素必須在合適的范圍內(nèi)
4.如果前端傳來的數(shù)值不符合標(biāo)準(zhǔn),后端會(huì)報(bào)錯(cuò),所以我們可以編寫一個(gè)全局異常類來捕獲這個(gè)參數(shù)綁定異常,從而給前端返回提示消息
@ControllerAdvice @ResponseBody public class GlobalExceptionHandler { @ExceptionHandler(value = Exception.class)//攔截所有異常 public JSONResult exceptionHandler(HttpServletRequest request, Exception e){ e.printStackTrace(); if(e instanceof BindException) { BindException ex = (BindException)e; Listerrors = ex.getAllErrors();//綁定錯(cuò)誤返回很多錯(cuò)誤,是一個(gè)錯(cuò)誤列表,只需要第一個(gè)錯(cuò)誤 ObjectError error = errors.get(0); String msg = error.getDefaultMessage(); return JSONResult.errorMsg("用戶名或密碼格式錯(cuò)誤"); }else { return JSONResult.errorMsg("未知錯(cuò)誤"); } } }
5.驗(yàn)證
前端:
后端:
如圖,后端捕獲了異常,并向前端返回了提示信息
6.我們還可以使用分組功能,是變量在某些場景需要被驗(yàn)證,而不是所有場景,增加靈活性。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/75171.html
摘要:時(shí)間年月日星期三說明使用規(guī)范校驗(yàn)接口請求參數(shù)源碼第一章理論簡介背景介紹如今互聯(lián)網(wǎng)項(xiàng)目都采用接口形式進(jìn)行開發(fā)。該規(guī)范定義了一個(gè)元數(shù)據(jù)模型,默認(rèn)的元數(shù)據(jù)來源是注解。 時(shí)間:2017年11月08日星期三說明:使用JSR303規(guī)范校驗(yàn)http接口請求參數(shù) 源碼:https://github.com/zccodere/s... 第一章:理論簡介 1-1 背景介紹 如今互聯(lián)網(wǎng)項(xiàng)目都采用HTTP接口...
摘要:引言的一個(gè)便捷功能是外部化配置,可以輕松訪問屬性文件中定義的屬性。本文將詳細(xì)介紹的使用。 引言 Spring Boot的一個(gè)便捷功能是外部化配置,可以輕松訪問屬性文件中定義的屬性。本文將詳細(xì)介紹@ConfigurationProperties的使用。 配置項(xiàng)目POM 在pom.xml中定義Spring-Boot 為parent org.springframework.boot...
摘要:也就是說如果傳的中有的為空或者是負(fù)數(shù),入?yún)Ⅱ?yàn)證不會(huì)檢測出來。為了能夠進(jìn)行嵌套驗(yàn)證,必須手動(dòng)在實(shí)體的字段上明確指出這個(gè)字段里面的實(shí)體也要進(jìn)行驗(yàn)證。用在方法入?yún)⑸蠠o法單獨(dú)提供嵌套驗(yàn)證功能。 來源:blog.csdn.net/qq_27680317/article/details/79970590整編:Java技術(shù)棧(公眾號ID:javastack) Spring Validation驗(yàn)證框...
摘要:前言估計(jì)很多朋友都認(rèn)為參數(shù)校驗(yàn)是客戶端的職責(zé),不關(guān)服務(wù)端的事。輕則導(dǎo)致服務(wù)器宕機(jī),重則泄露數(shù)據(jù)。所以,這時(shí)就需要設(shè)置第二道關(guān)卡,服務(wù)端驗(yàn)證了。老項(xiàng)目的服務(wù)端校驗(yàn)不能為空不能為空看以上代碼,就一個(gè)的校驗(yàn)就如此麻煩。 前言 估計(jì)很多朋友都認(rèn)為參數(shù)校驗(yàn)是客戶端的職責(zé),不關(guān)服務(wù)端的事。其實(shí)這是錯(cuò)誤的,學(xué)過 Web 安全的都知道,客戶端的驗(yàn)證只是第一道關(guān)卡。它的參數(shù)驗(yàn)證并不是安全的,一旦被有心人...
摘要:本文主要介紹在中自動(dòng)校驗(yàn)的機(jī)制。引入依賴我們使用構(gòu)建應(yīng)用來進(jìn)行演示。在中校驗(yàn)數(shù)據(jù)值得注意的地方參數(shù)前需要加上注解,表明需要對其進(jìn)行校驗(yàn),而校驗(yàn)的信息會(huì)存放到其后的中。層改寫方法限定需要進(jìn)行校驗(yàn),而方法則不做限制。 簡介 JSR303/JSR-349,hibernate validation,spring validation之間的關(guān)系。JSR303是一項(xiàng)標(biāo)準(zhǔn),JSR-349是其的升級版...
閱讀 1596·2023-04-25 15:50
閱讀 1314·2021-09-22 15:49
閱讀 2941·2021-09-22 15:06
閱讀 3603·2019-08-30 15:54
閱讀 2341·2019-08-29 11:33
閱讀 2126·2019-08-23 17:56
閱讀 2155·2019-08-23 17:06
閱讀 1304·2019-08-23 15:55