SpringBoot Validation入?yún)⑿r瀲H化的項目實踐
在 Spring Boot 中,可以使用 Validation 和國際化來實現(xiàn)對入?yún)⒌男r灐?/p>
常用的校驗
@NotNull | 驗證字段值不能為 null |
@NotEmpty | 驗證字段值不能為 null 或空字符串 |
@NotBlank | 驗證字符串字段值不能為空、null,并且必須至少包含一個非空白字符 |
@Size | 驗證字符串、集合或數(shù)組的大小是否在指定范圍內 |
@Min | 驗證數(shù)值字段值必須大于等于指定的最小值 |
@Max | 驗證數(shù)值字段值必須小于等于指定的最大值 |
驗證字段值必須是有效的電子郵件地址格式 | |
@Pattern | 驗證字段值必須匹配指定的正則表達式模式 |
@Past | 驗證日期字段值必須是過去的日期 |
@Future | 驗證日期字段值必須是將來的日期 |
引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
創(chuàng)建properties文件
安裝插件
創(chuàng)建文件
添加語言
添加配置
語言配置
非空配置
長度配置
解決properties文件中文亂碼
mode添加注解
@NotBlank
注解用于驗證字符串類型字段不為空或不為 null。如果驗證失敗,則使用 message
屬性中定義的錯誤消息提示用戶輸入不能為空或 null 值。
@Length
注解用于驗證字符串類型字段的長度是否符合指定的范圍。如果驗證失敗,就會使用 message
屬性中定義的錯誤消息提示用戶輸入的長度非法。
/** * 學生姓名 */ @NotBlank(message = "{name.notBlank}") @Length(min = 2,max = 19,message="{name.length}") private String name;
controller添加注解
@Validated
是 Spring Framework 提供的一個注解,用于在控制器方法級別或類級別上啟用方法參數(shù)驗證,以對請求參數(shù)進行驗證。
@Valid
是 Java 標準庫中的一個注解,它與 Bean Validation 規(guī)范(JSR 380)一起使用,用于啟用對象級別驗證。
@RestController @RequestMapping("/test") @Validated public class TestController { @PostMapping("/user") public ResponseResult<String> user(@Valid @RequestBody Student student) { return new ResponseResult<>("userToken"); } }
添加異常捕捉
這個類捕獲參數(shù)異常
import com.example.demo.util.HttpCodeEnum; import com.example.demo.util.ResponseResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.util.CollectionUtils; import org.springframework.validation.FieldError; import org.springframework.validation.ObjectError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.servlet.http.HttpServletRequest; import java.util.List; @RestControllerAdvice public class GlobalExceptionHandler { private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); @Autowired private HttpServletRequest httpServletRequest; private final String sysError="系統(tǒng)出錯"; // get請求的對象參數(shù)校驗異常 @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler({MissingServletRequestParameterException.class}) public ResponseResult bindExceptionHandler(MissingServletRequestParameterException e) { String requestURI = httpServletRequest.getRequestURI(); log.error("請求地址'{}',get方式請求參數(shù)'{}'必傳", requestURI,e.getParameterName()); return ResponseResult.errorResult(HttpCodeEnum.SYSTEM_ERROR.getCode(), e.getMessage()); } // post請求的對象參數(shù)校驗異常 @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler({MethodArgumentNotValidException.class}) public ResponseResult methodArgumentNotValidHandler(MethodArgumentNotValidException e) { String requestURI = httpServletRequest.getRequestURI(); log.error("請求地址'{}',post方式請求參數(shù)異常'{}'", requestURI, e.getMessage()); List<ObjectError> allErrors = e.getBindingResult().getAllErrors(); return ResponseResult.errorResult(HttpCodeEnum.SYSTEM_ERROR.getCode(), getValidExceptionMsg(allErrors)); } private String getValidExceptionMsg(List<ObjectError> errors) { if(!CollectionUtils.isEmpty(errors)){ StringBuilder sb = new StringBuilder(); errors.forEach(error -> { if (error instanceof FieldError) { sb.append(((FieldError)error).getField()).append(":"); } sb.append(error.getDefaultMessage()).append(";"); }); String msg = sb.toString(); msg = msg.substring(0, msg.length() -1); return msg; } return null; } }
測試
name為空
name長度不符合
切換為英文
到此這篇關于SpringBoot Validation入?yún)⑿r瀲H化的文章就介紹到這了,更多相關SpringBoot Validation入?yún)⑿r瀲H化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
IDEA生成patch和使用patch的方法實現(xiàn)
比如你本地修復的 bug,需要把增量文件發(fā)給客戶,很多場景下大家都需要手工整理修改的文件,并整理好目錄,這個很麻煩,那有沒有簡單的技巧呢?本文主要介紹了IDEA生成patch和使用patch的方法實現(xiàn),感興趣的可以了解一下2023-08-08關于HttpServletRequest獲取POST請求Body參數(shù)的3種方式
這篇文章主要介紹了關于HttpServletRequest獲取POST請求Body參數(shù)的3種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11Springboot web項目打包實現(xiàn)過程解析
這篇文章主要介紹了Springboot web項目打包實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08使用Spring實現(xiàn)@Value注入靜態(tài)字段
這篇文章主要介紹了使用Spring實現(xiàn)@Value注入靜態(tài)字段方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05