SpringBoot Validation入?yún)⑿r?yàn)國(guó)際化的項(xiàng)目實(shí)踐
在 Spring Boot 中,可以使用 Validation 和國(guó)際化來(lái)實(shí)現(xiàn)對(duì)入?yún)⒌男r?yàn)。
常用的校驗(yàn)
| @NotNull | 驗(yàn)證字段值不能為 null |
| @NotEmpty | 驗(yàn)證字段值不能為 null 或空字符串 |
| @NotBlank | 驗(yàn)證字符串字段值不能為空、null,并且必須至少包含一個(gè)非空白字符 |
| @Size | 驗(yàn)證字符串、集合或數(shù)組的大小是否在指定范圍內(nèi) |
| @Min | 驗(yàn)證數(shù)值字段值必須大于等于指定的最小值 |
| @Max | 驗(yàn)證數(shù)值字段值必須小于等于指定的最大值 |
| 驗(yàn)證字段值必須是有效的電子郵件地址格式 | |
| @Pattern | 驗(yàn)證字段值必須匹配指定的正則表達(dá)式模式 |
| @Past | 驗(yàn)證日期字段值必須是過(guò)去的日期 |
| @Future | 驗(yàn)證日期字段值必須是將來(lái)的日期 |
引入依賴(lài)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
創(chuàng)建properties文件
安裝插件

創(chuàng)建文件

添加語(yǔ)言

添加配置

語(yǔ)言配置
非空配置

長(zhǎng)度配置

解決properties文件中文亂碼


mode添加注解
@NotBlank 注解用于驗(yàn)證字符串類(lèi)型字段不為空或不為 null。如果驗(yàn)證失敗,則使用 message 屬性中定義的錯(cuò)誤消息提示用戶(hù)輸入不能為空或 null 值。
@Length 注解用于驗(yàn)證字符串類(lèi)型字段的長(zhǎng)度是否符合指定的范圍。如果驗(yàn)證失敗,就會(huì)使用 message 屬性中定義的錯(cuò)誤消息提示用戶(hù)輸入的長(zhǎng)度非法。
/**
* 學(xué)生姓名
*/
@NotBlank(message = "{name.notBlank}")
@Length(min = 2,max = 19,message="{name.length}")
private String name;controller添加注解
@Validated 是 Spring Framework 提供的一個(gè)注解,用于在控制器方法級(jí)別或類(lèi)級(jí)別上啟用方法參數(shù)驗(yàn)證,以對(duì)請(qǐng)求參數(shù)進(jìn)行驗(yàn)證。
@Valid 是 Java 標(biāo)準(zhǔn)庫(kù)中的一個(gè)注解,它與 Bean Validation 規(guī)范(JSR 380)一起使用,用于啟用對(duì)象級(jí)別驗(yàn)證。
@RestController
@RequestMapping("/test")
@Validated
public class TestController {
@PostMapping("/user")
public ResponseResult<String> user(@Valid @RequestBody Student student) {
return new ResponseResult<>("userToken");
}
}添加異常捕捉
這個(gè)類(lèi)捕獲參數(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)出錯(cuò)";
// get請(qǐng)求的對(duì)象參數(shù)校驗(yàn)異常
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler({MissingServletRequestParameterException.class})
public ResponseResult bindExceptionHandler(MissingServletRequestParameterException e) {
String requestURI = httpServletRequest.getRequestURI();
log.error("請(qǐng)求地址'{}',get方式請(qǐng)求參數(shù)'{}'必傳", requestURI,e.getParameterName());
return ResponseResult.errorResult(HttpCodeEnum.SYSTEM_ERROR.getCode(), e.getMessage());
}
// post請(qǐng)求的對(duì)象參數(shù)校驗(yàn)異常
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler({MethodArgumentNotValidException.class})
public ResponseResult methodArgumentNotValidHandler(MethodArgumentNotValidException e) {
String requestURI = httpServletRequest.getRequestURI();
log.error("請(qǐng)求地址'{}',post方式請(qǐng)求參數(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;
}
}測(cè)試
name為空

name長(zhǎng)度不符合

切換為英文

到此這篇關(guān)于SpringBoot Validation入?yún)⑿r?yàn)國(guó)際化的文章就介紹到這了,更多相關(guān)SpringBoot Validation入?yún)⑿r?yàn)國(guó)際化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
servlet上傳文件實(shí)現(xiàn)代碼詳解(四)
這篇文章主要為大家詳細(xì)介紹了servlet上傳文件的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
Java并發(fā)包之CopyOnWriteArrayList類(lèi)的深入講解
這篇文章主要給大家介紹了關(guān)于Java并發(fā)包之CopyOnWriteArrayList類(lèi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
關(guān)于Java8新特性O(shè)ptional類(lèi)的詳細(xì)解讀
Optional類(lèi)是一個(gè)容器類(lèi),它可以保存類(lèi)型T的值,代表這個(gè)值存在?;蛘邇H僅保存null,表示這個(gè)值不存在,原來(lái)用 null 表示一個(gè)值不存在,現(xiàn)在Optional 可以更好的表達(dá)這個(gè)概念。并且可以避免空指針異常,需要的朋友可以參考下2023-05-05
深度解析Java常量池中的Integer緩沖池和String常量池
為了減少對(duì)象重復(fù)創(chuàng)建、提升運(yùn)行時(shí)效率,Java 內(nèi)部提供了兩種重要的優(yōu)化機(jī)制Integer 緩沖池(IntegerCache)和 String 常量池(String Pool),本文將深入剖析兩大常量池的底層實(shí)現(xiàn)、工作流程、適用范圍,并通過(guò)流程圖和代碼示例幫助你徹底掌握2026-05-05
解決SpringBoot @value注解取不到值的問(wèn)題
這篇文章主要介紹了解決SpringBoot @value注解取不到值的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07

