日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

SpringBoot + validation 接口參數(shù)校驗(yàn)的思路詳解

瀏覽:157日期:2023-04-15 11:48:45

有參數(shù)傳遞的地方都少不了參數(shù)校驗(yàn)。在web開發(fā)中,前端的參數(shù)校驗(yàn)是為了用戶體驗(yàn),后端的參數(shù)校驗(yàn)是為了安全。試想一下,如果在controller層中沒有經(jīng)過任何校驗(yàn)的參數(shù)通過service層、dao層一路來到了數(shù)據(jù)庫(kù)就可能導(dǎo)致嚴(yán)重的后果,最好的結(jié)果是查不出數(shù)據(jù),嚴(yán)重一點(diǎn)就是報(bào)錯(cuò),如果這些沒有被校驗(yàn)的參數(shù)中包含了惡意代碼,那就可能導(dǎo)致更嚴(yán)重的后果。

實(shí)踐

一、引入依賴

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

二、使用校驗(yàn)

在controller層的參數(shù)校驗(yàn)可以分為兩種場(chǎng)景:

單個(gè)參數(shù)校驗(yàn)實(shí)體類參數(shù)校驗(yàn)

2.1 單參數(shù)校驗(yàn)

/** * 參數(shù)校驗(yàn)測(cè)試 控制類 * @author oyc */@RestController@RequestMapping('user')@Validatedpublic class RequestParamsValidatedController { private Logger logger = LoggerFactory.getLogger(this.getClass()); @GetMapping public User test(@NotNull(message = '姓名不能為空') String name, @NotNull(message = '年齡不能為空') @Max(value = 99, message = '不能大于200歲') Integer age) { logger.info('name:' + name + ' -age:' + age); return new User(name, age); }}

2.2 實(shí)體類參數(shù)校驗(yàn)

/** * 參數(shù)校驗(yàn)測(cè)試 控制類 * @author oyc */@RestController@RequestMapping('user')@Validatedpublic class RequestParamsValidatedController { private Logger logger = LoggerFactory.getLogger(this.getClass()); @PostMapping public User save(@Validated User user) { logger.info(user.toString()); return user; }}

package com.oycbest.springbootvalidated.vo; import javax.validation.constraints.*;import java.io.Serializable; /** * 用戶實(shí)體類 * @author oyc */public class User implements Serializable { private String userId; @NotNull(message = '用戶名不能為空') private String userName; @NotNull(message = '年齡不能為空') @Max(value = 100, message = '年齡不能大于100歲') private int age; @NotNull(message = '郵箱不能為空') @Email(message = '郵箱格式不正確') private String email; @NotNull(message = '電話號(hào)碼不能為空') private String phoneNumber; public User(@NotNull(message = '用戶名不能為空') String userName, int age) { this.userName = userName; this.age = age; } public User() { } public User(String userId, @NotNull(message = '用戶名不能為空') String userName, int age, String email, String phoneNumber) { this.userId = userId; this.userName = userName; this.age = age; this.email = email; this.phoneNumber = phoneNumber; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } @Override public String toString() { return 'User{' + 'userId=’' + userId + ’’’ + ', userName=’' + userName + ’’’ + ', age=' + age + ', email=’' + email + ’’’ + ', phoneNumber=’' + phoneNumber + ’’’ + ’}’; }}

2.3 定義統(tǒng)一異常處理

package com.oycbest.springbootvalidated.exception; import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.annotation.Bean;import org.springframework.http.HttpStatus;import org.springframework.stereotype.Component;import org.springframework.validation.BindException;import org.springframework.validation.FieldError;import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.ResponseStatus; import javax.validation.ConstraintViolation;import javax.validation.ConstraintViolationException;import javax.validation.ValidationException;import java.util.List;import java.util.Set; /** * 全局異常處理 * * @author oyc */@ControllerAdvice@Componentpublic class GlobalExceptionHandler { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Bean public MethodValidationPostProcessor methodValidationPostProcessor() { return new MethodValidationPostProcessor(); } @ExceptionHandler @ResponseBody @ResponseStatus(HttpStatus.BAD_REQUEST) public String handle(ValidationException exception) { logger.error('請(qǐng)求異常:' + exception.getMessage()); if (exception instanceof ConstraintViolationException) { ConstraintViolationException exs = (ConstraintViolationException) exception; Set<ConstraintViolation<?>> violations = exs.getConstraintViolations(); for (ConstraintViolation<?> item : violations) { //打印驗(yàn)證不通過的信息 logger.error('請(qǐng)求異常:' + item.getMessage()); } } return '請(qǐng)求異常: ' + exception.getMessage(); } @ResponseBody @ExceptionHandler(value = BindException.class) public String bindException(Exception e) { if (e instanceof BindException) { BindException exs = (BindException) e; List<FieldError> fieldErrors = exs.getFieldErrors(); for (FieldError item : fieldErrors) { logger.error('請(qǐng)求異常:' + item.getDefaultMessage()); } } logger.error('數(shù)據(jù)綁定異常:' + e.getMessage()); return '數(shù)據(jù)綁定異常'; } @ResponseBody @ExceptionHandler(value = Exception.class) public String defaultException(Exception e) { logger.error('請(qǐng)求異常:' + e.getMessage()); return '請(qǐng)求異常 ' + e.getMessage(); } }

三、約束性注解(簡(jiǎn)單)說明

注解

功能

@AssertFalse

可以為null,如果不為null的話必須為false

@AssertTrue

可以為null,如果不為null的話必須為true

@DecimalMax

設(shè)置不能超過最大值

@DecimalMin

設(shè)置不能超過最小值

@Digits

設(shè)置必須是數(shù)字且數(shù)字整數(shù)的位數(shù)和小數(shù)的位數(shù)必須在指定范圍內(nèi)

@Future

日期必須在當(dāng)前日期的未來

@Past

日期必須在當(dāng)前日期的過去

@Max

最大不得超過此最大值

@Min

最大不得小于此最小值

@NotNull

不能為null,可以是空

@Null

必須為null

@Pattern

必須滿足指定的正則表達(dá)式

@Size

集合、數(shù)組、map等的size()值必須在指定范圍內(nèi)

@Email

必須是email格式

@Length

長(zhǎng)度必須在指定范圍內(nèi)

@NotBlank

字符串不能為null,字符串trim()后也不能等于“”

@NotEmpty

不能為null,集合、數(shù)組、map等size()不能為0;字符串trim()后可以等于“”

@Range

值必須在指定范圍內(nèi)

@URL

必須是一個(gè)URL

到此這篇關(guān)于SpringBoot + validation 接口參數(shù)校驗(yàn)的文章就介紹到這了,更多相關(guān)SpringBoot + validation 接口參數(shù)校驗(yàn)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩午夜视频在线| 国产精品视频一区二区三区| 国产v日韩v欧美v| 国产精品一区二区三区美女 | 蜜桃视频免费观看一区| 免费成人av在线播放| 日韩国产在线一| 亚洲欧美日韩视频二区| 精品视频91| 欧美aa在线视频| 福利一区和二区| 久久久人人人| 亚洲影视一区| 欧美aⅴ一区二区三区视频| 美女国产精品| 国产精品久久久久久av公交车| 久久三级毛片| 五月综合激情| 国产精品极品在线观看| 97视频热人人精品免费| 欧美日韩国产在线一区| 三级久久三级久久久| 麻豆久久久久久| 好吊日精品视频| 国产调教精品| 欧美日韩国产在线一区| 国产高清精品二区| 天堂成人免费av电影一区| 欧美激情综合| 国内精品福利| 久久中文字幕一区二区| 国产亚洲毛片| 国产精品99一区二区三区| 热久久国产精品| 中文字幕成在线观看| 综合激情网站| 国产一区二区三区自拍| 欧美精品中文字幕亚洲专区| 欧美~级网站不卡| 精品亚洲免a| 欧美自拍一区| 蜜臀久久99精品久久久久宅男| 国产精品99一区二区三| 国产图片一区| 免费精品视频| 亚洲成人日韩| 黄色在线网站噜噜噜| 久久国内精品自在自线400部| 红桃视频国产一区| 免费污视频在线一区| 日本久久精品| 国产一区调教| 精品入口麻豆88视频| 国产精品亚洲一区二区在线观看| 美女黄网久久| 亚州av一区| 日韩欧美三区| 日韩成人精品一区二区三区 | 四虎国产精品免费观看| 国产精品2区| 欧美a在线观看| 精品资源在线| 精品国产精品久久一区免费式| 国产色99精品9i| 国产激情精品一区二区三区| 国产欧美成人| 国产a久久精品一区二区三区| 久久久国产精品入口麻豆| 麻豆91精品视频| 色偷偷偷在线视频播放| а√在线中文在线新版| 日韩欧美一区二区三区免费观看| 久久精品国产成人一区二区三区| 欧美aa在线视频| 在线一区视频观看| 国产亚洲精品v| 国产亚洲一区二区三区不卡| 欧美精品第一区| 一区二区三区视频免费观看| 99re国产精品| 国产欧美日韩在线一区二区| 欧美精品91| 日韩午夜高潮| 国产精品.xx视频.xxtv| 成人在线黄色| 视频在线观看一区二区三区| 日韩精选在线| 欧美国产日韩电影| 999久久久免费精品国产| 亚洲影视一区二区三区| 91亚洲国产高清| 中文一区一区三区免费在线观 | 日韩视频久久| 欧美激情福利| 喷白浆一区二区| 日韩国产一区二区| 日韩高清电影一区| 999视频精品| 麻豆极品一区二区三区| 伊人久久婷婷| 岛国精品一区| 性欧美69xoxoxoxo| av资源中文在线| 国产精品黄网站| 在线精品国产亚洲| 亚洲91久久| 精品视频99| 日韩高清在线不卡| 9色国产精品| 日本精品不卡| 国产一区二区三区探花| 午夜久久av| 欧美中文字幕| 欧美国产91| 久久精品亚洲人成影院| 国产不卡人人| 日韩精品午夜视频| 日韩一级欧洲| 欧美女激情福利| 亚州av乱码久久精品蜜桃| 欧美日韩国产v| 日韩中文欧美| 97精品在线| 日韩一区二区三区免费| 欧美激情另类| 色一区二区三区| 99久久激情| 亚洲香蕉网站| 国产aⅴ精品一区二区四区| 欧美1区2区3区| 在线成人动漫av| 国产va在线视频| 日韩av免费| 九九综合在线| 免费视频一区二区| 亚洲精品乱码| 97精品久久| 成人日韩av| 欧美午夜精品一区二区三区电影| 性欧美69xoxoxoxo| 日韩有码av| 精品国产美女a久久9999| 色婷婷综合网| 国产农村妇女精品一二区| 亚洲综合福利| 狂野欧美性猛交xxxx| 欧美男人天堂| 国产视频一区欧美| 国产精品一二| 性欧美69xoxoxoxo| 91精品尤物| 少妇久久久久| 日韩高清一区在线| 日韩高清成人| 日韩精品国产精品| 日韩国产在线| 亚洲精品乱码| 国产精品99久久精品| 丝袜美腿亚洲色图| 精品视频国产| 亚洲精品三级| 高清一区二区| 亚洲久久视频| 亚洲午夜黄色| 久久97久久97精品免视看秋霞| 成人av动漫在线观看| 欧美激情福利| 亚洲三级精品| 日韩毛片在线| 国产精品115| 亚洲欧美日本国产| 999久久久精品国产| 麻豆国产精品| 日韩1区2区3区| 亚洲欧美久久久| 国产自产自拍视频在线观看| 蜜臀久久99精品久久久久久9| 欧美一级鲁丝片| 麻豆久久一区| 国产亚洲精品精品国产亚洲综合| 91久久午夜| 影院欧美亚洲| 久久视频精品| 欧美日韩视频网站| 国产成年精品| 久久亚洲人体| 国产精品免费99久久久| 婷婷成人av| 蜜臀av在线播放一区二区三区| 激情久久婷婷| 国户精品久久久久久久久久久不卡| 久久伊人亚洲| 精品国产亚洲一区二区在线观看| 国产乱码精品| 久久99久久久精品欧美| 久久精品资源| 韩国一区二区三区视频| 久久影院资源站| 色一区二区三区四区| 婷婷综合六月|