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)的日期 |
引入依賴
<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)證字符串類型字段不為空或不為 null。如果驗(yàn)證失敗,則使用 message
屬性中定義的錯(cuò)誤消息提示用戶輸入不能為空或 null 值。
@Length
注解用于驗(yàn)證字符串類型字段的長(zhǎng)度是否符合指定的范圍。如果驗(yàn)證失敗,就會(huì)使用 message
屬性中定義的錯(cuò)誤消息提示用戶輸入的長(zhǎng)度非法。
/** * 學(xué)生姓名 */ @NotBlank(message = "{name.notBlank}") @Length(min = 2,max = 19,message="{name.length}") private String name;
controller添加注解
@Validated
是 Spring Framework 提供的一個(gè)注解,用于在控制器方法級(jí)別或類級(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è)類捕獲參數(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)文章
IDEA生成patch和使用patch的方法實(shí)現(xiàn)
比如你本地修復(fù)的 bug,需要把增量文件發(fā)給客戶,很多場(chǎng)景下大家都需要手工整理修改的文件,并整理好目錄,這個(gè)很麻煩,那有沒有簡(jiǎn)單的技巧呢?本文主要介紹了IDEA生成patch和使用patch的方法實(shí)現(xiàn),感興趣的可以了解一下2023-08-08Java面向?qū)ο缶幊蹋ǚ庋b/繼承/多態(tài))實(shí)例解析
這篇文章主要介紹了Java面向?qū)ο缶幊蹋ǚ庋b/繼承/多態(tài))實(shí)例解析的相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10關(guān)于HttpServletRequest獲取POST請(qǐng)求Body參數(shù)的3種方式
這篇文章主要介紹了關(guān)于HttpServletRequest獲取POST請(qǐng)求Body參數(shù)的3種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Java反轉(zhuǎn)鏈表測(cè)試過(guò)程介紹
這篇文章主要介紹了Java反轉(zhuǎn)鏈表測(cè)試過(guò)程,學(xué)習(xí)過(guò)數(shù)據(jù)結(jié)構(gòu)的小伙伴們,對(duì)鏈表想來(lái)是并不陌生。本篇文章將為大家介紹幾種在Java語(yǔ)言當(dāng)中,實(shí)現(xiàn)鏈表反轉(zhuǎn)的幾種方法,以下是具體內(nèi)容2023-04-04JavaSwing基礎(chǔ)之Layout布局相關(guān)知識(shí)詳解
上次我們說(shuō)到View的Mearsure流程,今天接著說(shuō)說(shuō)layout. 關(guān)于layout,很多朋友知道它是負(fù)責(zé)布局的,那么具體是怎么布局的?viewGroup和view的layout方法又有什么不同?一起來(lái)看看吧,需要的朋友可以參考下2021-05-05Springboot web項(xiàng)目打包實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Springboot web項(xiàng)目打包實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08使用Spring實(shí)現(xiàn)@Value注入靜態(tài)字段
這篇文章主要介紹了使用Spring實(shí)現(xiàn)@Value注入靜態(tài)字段方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05