生活随笔
收集整理的這篇文章主要介紹了
Java JSR303 valid
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
?? ? 不管是html頁面表單提交的對象數據還是和第三方公司進行接口對接,都需要對接收到的數據進行校驗(非空、長度、格式等等)。如果使用if一個個進行校驗(字段非常多),這是讓人崩潰的過程。幸好jdk或hibernate都提供了對object對象的校驗,只需加上相應的注解即可。
? ? ?本人喜歡學習時,都建立個maven小項目進行實踐學習。
首先引入包的管理 <dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>2.2.4</version> </dependency> <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version></dependency><dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.2.2.Final</version> </dependency>
? ??實現校驗類并使用 package com.sk.browser.utils;import java.util.HashMap;
import java.util.Map;
import java.util.Set; import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.groups.Default;/*** 數據驗證工具類
* @author 高國藩
* @date 2017年4月25日 上午10:32:24*/
public class ValidatorUtil {private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();public static <T> Map<String, StringBuffer> validate(T obj) {Map<String, StringBuffer> errorMap = null;Set<ConstraintViolation<T>> set = validator.validate(obj, Default.class);if (set != null && set.size() > 0) {errorMap = new HashMap<String, StringBuffer>();String property = null;for (ConstraintViolation<T> cv : set) {property = cv.getPropertyPath().toString();if (errorMap.get(property) != null) {errorMap.get(property).append("," + cv.getMessage());} else {StringBuffer sb = new StringBuffer();sb.append(cv.getMessage());errorMap.put(property, sb);}}}return errorMap;}}
?
自定義校驗類 package com.sk.system.validator;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import javax.validation.Constraint;
import javax.validation.Payload; /*** 定義valid管理器
* @author 高國藩
* @date 2017年4月25日 上午11:16:37*/
public class CustomValidation {/*** 定義金額校驗* @author 高國藩* @date 2017年4月25日 上午11:06:01*/@Target({ElementType.FIELD, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy=MoneyValidator.class) public @interface Money { String message() default "金額格式不正確"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
}
package com.sk.system.validator;import java.util.regex.Pattern;import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;import com.sk.system.validator.CustomValidation.Money;public class MoneyValidator implements ConstraintValidator<Money, Double> {private String moneyReg = "^\\d+(\\.\\d{1,2})?$";//表示金額的正則表達式 private Pattern moneyPattern = Pattern.compile(moneyReg); @Overridepublic void initialize(Money arg0) {}@Overridepublic boolean isValid(Double arg0, ConstraintValidatorContext arg1) {if (arg0 == null) //金額是空的,返回true,是因為如果null,則會有@NotNull進行提示 //如果這里false的話,那金額是null,@Money中的message也會進行提示 //自己可以嘗試 return true; return moneyPattern.matcher(arg0.toString()).matches(); }}
?
校驗注解匯總?????????
????? ? ?其中有一個要注意的就是@NotBlack,只針對String類型有用
????? ? ?另外一點就是javaConfig中的springMvc配置jsr303數據類型校驗不起作用的原因,還未找到,請大家明白的及時聯系我,感謝了 ~~~
轉載于:https://my.oschina.net/gaoguofan/blog/886640
總結
以上是生活随笔為你收集整理的Java JSR303 valid的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。