SpringBoot Validation入?yún)⑿r瀲H化的項目實踐
在 Spring Boot 中,可以使用 Validation 和國際化來實現(xiàn)對入?yún)⒌男r灐?/p>
常用的校驗
| @NotNull | 驗證字段值不能為 null |
| @NotEmpty | 驗證字段值不能為 null 或空字符串 |
| @NotBlank | 驗證字符串字段值不能為空、null,并且必須至少包含一個非空白字符 |
| @Size | 驗證字符串、集合或數(shù)組的大小是否在指定范圍內(nèi) |
| @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 屬性中定義的錯誤消息提示用戶輸入的長度非法。
/**
* 學(xué)生姓名
*/
@NotBlank(message = "{name.notBlank}")
@Length(min = 2,max = 19,message="{name.length}")
private String name;controller添加注解
@Validated 是 Spring Framework 提供的一個注解,用于在控制器方法級別或類級別上啟用方法參數(shù)驗證,以對請求參數(shù)進行驗證。
@Valid 是 Java 標(biāo)準(zhǔn)庫中的一個注解,它與 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長度不符合

切換為英文

到此這篇關(guān)于SpringBoot Validation入?yún)⑿r瀲H化的文章就介紹到這了,更多相關(guān)SpringBoot Validation入?yún)⑿r瀲H化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA生成patch和使用patch的方法實現(xiàn)
比如你本地修復(fù)的 bug,需要把增量文件發(fā)給客戶,很多場景下大家都需要手工整理修改的文件,并整理好目錄,這個很麻煩,那有沒有簡單的技巧呢?本文主要介紹了IDEA生成patch和使用patch的方法實現(xiàn),感興趣的可以了解一下2023-08-08
Java面向?qū)ο缶幊蹋ǚ庋b/繼承/多態(tài))實例解析
這篇文章主要介紹了Java面向?qū)ο缶幊蹋ǚ庋b/繼承/多態(tài))實例解析的相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。2017-10-10
關(guān)于HttpServletRequest獲取POST請求Body參數(shù)的3種方式
這篇文章主要介紹了關(guān)于HttpServletRequest獲取POST請求Body參數(shù)的3種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
JavaSwing基礎(chǔ)之Layout布局相關(guān)知識詳解
上次我們說到View的Mearsure流程,今天接著說說layout. 關(guān)于layout,很多朋友知道它是負(fù)責(zé)布局的,那么具體是怎么布局的?viewGroup和view的layout方法又有什么不同?一起來看看吧,需要的朋友可以參考下2021-05-05
Springboot web項目打包實現(xiàn)過程解析
這篇文章主要介紹了Springboot web項目打包實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08
使用Spring實現(xiàn)@Value注入靜態(tài)字段
這篇文章主要介紹了使用Spring實現(xiàn)@Value注入靜態(tài)字段方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05

