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

您的位置:首頁技術文章
文章詳情頁

SpringBoot + validation 接口參數校驗的思路詳解

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

有參數傳遞的地方都少不了參數校驗。在web開發中,前端的參數校驗是為了用戶體驗,后端的參數校驗是為了安全。試想一下,如果在controller層中沒有經過任何校驗的參數通過service層、dao層一路來到了數據庫就可能導致嚴重的后果,最好的結果是查不出數據,嚴重一點就是報錯,如果這些沒有被校驗的參數中包含了惡意代碼,那就可能導致更嚴重的后果。

實踐

一、引入依賴

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

二、使用校驗

在controller層的參數校驗可以分為兩種場景:

單個參數校驗實體類參數校驗

2.1 單參數校驗

/** * 參數校驗測試 控制類 * @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 實體類參數校驗

/** * 參數校驗測試 控制類 * @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; /** * 用戶實體類 * @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 = '電話號碼不能為空') 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 定義統一異常處理

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('請求異常:' + exception.getMessage()); if (exception instanceof ConstraintViolationException) { ConstraintViolationException exs = (ConstraintViolationException) exception; Set<ConstraintViolation<?>> violations = exs.getConstraintViolations(); for (ConstraintViolation<?> item : violations) { //打印驗證不通過的信息 logger.error('請求異常:' + item.getMessage()); } } return '請求異常: ' + 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('請求異常:' + item.getDefaultMessage()); } } logger.error('數據綁定異常:' + e.getMessage()); return '數據綁定異常'; } @ResponseBody @ExceptionHandler(value = Exception.class) public String defaultException(Exception e) { logger.error('請求異常:' + e.getMessage()); return '請求異常 ' + e.getMessage(); } }

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

注解

功能

@AssertFalse

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

@AssertTrue

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

@DecimalMax

設置不能超過最大值

@DecimalMin

設置不能超過最小值

@Digits

設置必須是數字且數字整數的位數和小數的位數必須在指定范圍內

@Future

日期必須在當前日期的未來

@Past

日期必須在當前日期的過去

@Max

最大不得超過此最大值

@Min

最大不得小于此最小值

@NotNull

不能為null,可以是空

@Null

必須為null

@Pattern

必須滿足指定的正則表達式

@Size

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

@Email

必須是email格式

@Length

長度必須在指定范圍內

@NotBlank

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

@NotEmpty

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

@Range

值必須在指定范圍內

@URL

必須是一個URL

到此這篇關于SpringBoot + validation 接口參數校驗的文章就介紹到這了,更多相關SpringBoot + validation 接口參數校驗內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
中文字幕日韩亚洲| 亚洲91久久| 私拍精品福利视频在线一区| 欧美日韩国产传媒| 一区二区三区四区日韩| 老司机精品在线| 国产一区二区高清| 老鸭窝一区二区久久精品| 欧美自拍一区| 国产高潮在线| 欧美日韩四区| 激情综合网址| 日本欧美一区| аⅴ资源天堂资源库在线| 欧美日韩激情| 青青草伊人久久| 国产精品国产一区| 色老板在线视频一区二区| 蜜臀av免费一区二区三区| 欧美一级专区| 国产一区福利| 日韩一区精品视频| 精品视频国产| 亚洲国内精品| 精品视频91| 蜜臀久久99精品久久久久久9| 福利精品在线| 亚洲97av| 久久精品99久久无色码中文字幕| 日韩av成人高清| 免费视频一区二区| 自拍日韩欧美| 激情婷婷久久| 日韩一区欧美| 精品视频一区二区三区在线观看| 亚洲欧美日韩精品一区二区| 精品中文字幕一区二区三区| 欧美精品一二| 日韩av资源网| 亚洲在线一区| 日韩三区免费| 日韩av在线播放网址| 日本一不卡视频| 91久久亚洲| 国户精品久久久久久久久久久不卡 | 99久精品视频在线观看视频| 美女在线视频一区| 日本成人在线视频网站| 久久久夜夜夜| 欧产日产国产精品视频| 精品久久国产一区| 欧美韩一区二区| 国产精品s色| 国产成人久久精品麻豆二区| 久久狠狠婷婷| 无码日韩精品一区二区免费| 精品三级在线观看视频| 亚洲天堂久久| 人在线成免费视频| 日韩国产一区二区| 激情综合网址| 亚洲一区黄色| 久久国产精品免费精品3p| 国产欧美激情| 日本电影久久久| 亚洲精品乱码久久久久久蜜桃麻豆| 88久久精品| 精品久久久中文字幕| 国产成人免费精品| 日韩高清中文字幕一区二区| 视频二区不卡| 玖玖精品视频| 国产伦理久久久久久妇女| 国产精品.xx视频.xxtv| 国产成人精品亚洲线观看| 日韩久久视频| 激情91久久| 久久精品国产99| 国产日韩综合| 欧美日韩国产传媒| 国产精品原创| 日韩伦理在线一区| 美女高潮久久久| 巨乳诱惑日韩免费av| 精品国产不卡一区二区| 日韩一区免费| 性欧美69xoxoxoxo| 国产精品麻豆久久| 国产午夜久久av| 一区二区三区国产在线| 视频福利一区| 久久精品国产大片免费观看| 精品一区91| 国产亚洲精品久久久久婷婷瑜伽| 久久av综合| 视频在线观看国产精品| 欧美黄色一区| 国产亚洲在线观看| 美女尤物久久精品| 美女在线视频一区| 亚洲精品无吗| 久色成人在线| 免费观看久久av| 日韩国产一区二区| 精品亚洲a∨| 国产精品亚洲四区在线观看| 涩涩涩久久久成人精品| 麻豆精品网站| 人人精品人人爱| 伊人精品一区| 久久精品av| 欧美粗暴jizz性欧美20| 久久国产中文字幕| 久久国产中文字幕| 国产99亚洲| 国产一区二区三区自拍| 久久亚洲成人| 免费黄色成人| 午夜久久tv| 夜夜嗨av一区二区三区网站四季av| 久久国产小视频| 欧美另类专区| 模特精品在线| 最新国产精品久久久| 伊人影院久久| 国产美女精品| 在线精品亚洲| 欧美一区久久| 国产精品白浆| 日本一二区不卡| 午夜欧美巨大性欧美巨大| 精品国模一区二区三区| 激情五月综合网| 国产精品外国| 色8久久久久| 国产精品一区二区免费福利视频| 国产伦理一区| 精品视频国产| 日韩欧美午夜| 超碰在线99| 国产精品91一区二区三区| 中文亚洲欧美| 日韩区一区二| 麻豆久久一区| 日韩av一级| 樱桃成人精品视频在线播放| 久久福利精品| 国产日产精品_国产精品毛片| 国产精品igao视频网网址不卡日韩 | 夜鲁夜鲁夜鲁视频在线播放| 欧美日韩国产观看视频| 日韩理论视频| 国产亚洲一区在线| 少妇精品久久久一区二区| 久久99久久人婷婷精品综合| 国产福利片在线观看| 激情自拍一区| 天堂久久av| 久久精品国产999大香线蕉| 日韩在线中文| 亚洲日本欧美| 激情不卡一区二区三区视频在线| 久久久五月天| 亚洲日本欧美| 国产精品二区不卡| 亚洲综合日本| 日韩精品高清不卡| 在线天堂中文资源最新版| 99在线|亚洲一区二区| 国产欧美日韩一区二区三区在线| 国产精品1区在线| 亚洲午夜91| 日韩精品欧美成人高清一区二区| 国产66精品| 尤物精品在线| 国产精品2区| 黄色欧美日韩| 麻豆国产欧美一区二区三区| 欧美成人亚洲| 国产精品1区| 国产专区一区| 日本一区二区中文字幕| 国产高清不卡| 日韩欧美久久| 久久精品高清| 国产精品欧美日韩一区| 日韩视频在线一区二区三区| 欧美激情91| 人人精品人人爱| 日韩欧美不卡| 国产精品一线| 好吊日精品视频| 美女国产精品久久久| 久久福利精品| 色在线中文字幕| 国产亚洲电影| 欧美女激情福利| 国产精品不卡| 日韩黄色av| 在线亚洲精品|