摘要:參數(shù)校驗(yàn)代碼見(jiàn)常規(guī)使用請(qǐng)求參數(shù)加上符合校驗(yàn)注解包括基本類型和自定義類。校驗(yàn)注解是在方法入?yún)⑸希瑒t需要在該方法所在的類上添加注解,在入?yún)⑶盎蚴窃诜椒ㄉ咸砑訂⒂眯r?yàn)注解都不生效。校驗(yàn)注解使用在方法入?yún)⑸蠒r(shí),拋出的是異常。
JSR-303 參數(shù)校驗(yàn)
代碼見(jiàn)validator-demo
1、常規(guī)使用1.1、請(qǐng)求參數(shù)加上符合JSR-303校驗(yàn)注解(包括基本類型和自定義類)。如果請(qǐng)求參數(shù)是自定義類,則在類的屬性上加校驗(yàn)注解。
1.2、請(qǐng)求參數(shù)前面加上 @javax.validation.Valid 注解,或是 @org.springframework.validation.annotation.Validated 注解,告訴spring框架調(diào)用時(shí)進(jìn)行參數(shù)校驗(yàn)。
1.3、校驗(yàn)注解是在方法入?yún)⑸希瑒t需要在該方法所在的類上添加 @org.springframework.validation.annotation.Validated 注解,在入?yún)⑶盎蚴窃诜椒ㄉ咸砑訂⒂眯r?yàn)注解都不生效。
1.4、如果請(qǐng)求參數(shù)列表中有 BindingResult,則springmvc框架不會(huì)向外拋異常,默認(rèn)代碼自行處理。
2、自定義注解2.1、創(chuàng)建自定義注解
import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*; /** * 無(wú)敏感詞校驗(yàn)注解 */ @Documented @Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = NoSensitiveWordsValidator.class) public @interface NoSensitiveWords { String message() default "包含敏感詞"; Class>[] groups() default {}; Class extends Payload>[] payload() default {}; }
2.2、自定義注解對(duì)應(yīng)的校驗(yàn)類
import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.util.HashSet; import java.util.Set; /** * 敏感詞校驗(yàn)邏輯 **/ public class NoSensitiveWordsValidator implements ConstraintValidator{ @Override public boolean isValid(String value, ConstraintValidatorContext context) { if (value == null || "".equals(value.trim())) { return true; } // 這里只簡(jiǎn)單舉例校驗(yàn) Set sensitiveWords = new HashSet<>(); sensitiveWords.add("毛澤東"); sensitiveWords.add("鄧小平"); for (String word : sensitiveWords) { if (value.contains(word)) { return false; } } return true; } }
2.3、在類屬性或方法入?yún)⑸鲜褂米远x注解
@Data public class Account { /** 昵稱 */ @Length(min = 2, max = 20) @NoSensitiveWords private String nickName; }3、自定義異常
3.1、校驗(yàn)注解使用在實(shí)體參數(shù)上時(shí),spring拋出的是org.springframework.web.bind.MethodArgumentNotValidException異常。
3.2、校驗(yàn)注解使用在方法入?yún)⑸蠒r(shí),spring拋出的是javax.validation.ConstraintViolationException異常。
3.3、針對(duì)上述兩種情況,可以做統(tǒng)一的攔截并封裝成統(tǒng)一的系統(tǒng)異常
import lombok.extern.slf4j.Slf4j; import org.linbo.demo.validator.bean.HttpResult; import org.springframework.validation.FieldError; import org.springframework.validation.ObjectError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import javax.validation.ConstraintViolationException; import java.util.List; import java.util.stream.Collectors; @ControllerAdvice @ResponseBody @Slf4j public class DefaultExceptionHandler { @ExceptionHandler(value = {MethodArgumentNotValidException.class}) public HttpResult4、國(guó)際化校驗(yàn)異常信息
4.1、在resources目錄下新增ValidationMessages.properties文件,英文為ValidationMessages_en.properties,中文為英文為ValidationMessages_zh_CN.properties,與標(biāo)準(zhǔn)國(guó)際化命名類型,都是ValidationMessages開頭命令。
4.2、定義信息key和value
4.3、在自定義校驗(yàn)注解的String message() default "{properties中定義的key}"中,
或是在使用校驗(yàn)注解時(shí)(@Length(min = 2, max = 20, message = "{properties中定義的key}"))加入properties中定義的key。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75372.html
摘要:時(shí)間年月日星期三說(shuō)明使用規(guī)范校驗(yàn)接口請(qǐng)求參數(shù)源碼第一章理論簡(jiǎn)介背景介紹如今互聯(lián)網(wǎng)項(xiàng)目都采用接口形式進(jìn)行開發(fā)。該規(guī)范定義了一個(gè)元數(shù)據(jù)模型,默認(rèn)的元數(shù)據(jù)來(lái)源是注解。 時(shí)間:2017年11月08日星期三說(shuō)明:使用JSR303規(guī)范校驗(yàn)http接口請(qǐng)求參數(shù) 源碼:https://github.com/zccodere/s... 第一章:理論簡(jiǎn)介 1-1 背景介紹 如今互聯(lián)網(wǎng)項(xiàng)目都采用HTTP接口...
摘要:我們有時(shí)需要對(duì)前端傳過(guò)來(lái)的數(shù)據(jù)做校驗(yàn),就可以使用。他可以使我們不用在每個(gè)編寫校驗(yàn)代碼,可以達(dá)到解耦的功能。本文環(huán)境為,框架使用。 我們有時(shí)需要對(duì)前端傳過(guò)來(lái)的數(shù)據(jù)做校驗(yàn),就可以使用spring validation。他可以使我們不用在每個(gè)Controller編寫校驗(yàn)代碼,可以達(dá)到解耦的功能。本文環(huán)境為jdk8,框架使用springboot 2.1.0.RELEASE。1.添加依賴 ...
摘要:前言估計(jì)很多朋友都認(rèn)為參數(shù)校驗(yàn)是客戶端的職責(zé),不關(guān)服務(wù)端的事。輕則導(dǎo)致服務(wù)器宕機(jī),重則泄露數(shù)據(jù)。所以,這時(shí)就需要設(shè)置第二道關(guān)卡,服務(wù)端驗(yàn)證了。老項(xiàng)目的服務(wù)端校驗(yàn)不能為空不能為空看以上代碼,就一個(gè)的校驗(yàn)就如此麻煩。 前言 估計(jì)很多朋友都認(rèn)為參數(shù)校驗(yàn)是客戶端的職責(zé),不關(guān)服務(wù)端的事。其實(shí)這是錯(cuò)誤的,學(xué)過(guò) Web 安全的都知道,客戶端的驗(yàn)證只是第一道關(guān)卡。它的參數(shù)驗(yàn)證并不是安全的,一旦被有心人...
摘要:初步使用主要使用注解的方式對(duì)進(jìn)行校驗(yàn),第一個(gè)例子在需要校驗(yàn)的字段上指定約束條件然后在中可以這樣調(diào)用,加上注解即可。如果校驗(yàn)失敗,默認(rèn)會(huì)返回框架的出錯(cuò)信息。指定到的分組名會(huì)全部進(jìn)行校驗(yàn),不指定的不校驗(yàn)。 Spring Boot - 表單校驗(yàn)(JSR303&Hibernate Validator) 回顧 Spring Boot - 初識(shí) Hello World Spring Boot -...
摘要:本文主要介紹在中自動(dòng)校驗(yàn)的機(jī)制。引入依賴我們使用構(gòu)建應(yīng)用來(lái)進(jìn)行演示。在中校驗(yàn)數(shù)據(jù)值得注意的地方參數(shù)前需要加上注解,表明需要對(duì)其進(jìn)行校驗(yàn),而校驗(yàn)的信息會(huì)存放到其后的中。層改寫方法限定需要進(jìn)行校驗(yàn),而方法則不做限制。 簡(jiǎn)介 JSR303/JSR-349,hibernate validation,spring validation之間的關(guān)系。JSR303是一項(xiàng)標(biāo)準(zhǔn),JSR-349是其的升級(jí)版...
閱讀 1971·2021-11-23 10:03
閱讀 4129·2021-11-22 09:34
閱讀 2466·2021-10-08 10:05
閱讀 2246·2019-08-30 15:53
閱讀 1686·2019-08-30 13:56
閱讀 1149·2019-08-29 16:52
閱讀 1102·2019-08-26 13:31
閱讀 3346·2019-08-26 11:45