日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java后台验证不能为空_java validation 后台参数验证的使用详解

發布時間:2023/12/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java后台验证不能为空_java validation 后台参数验证的使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

在后臺開發過程中,對參數的校驗成為開發環境不可缺少的一個環節。比如參數不能為null,email那么必須符合email的格式,如果手動進行if判斷或者寫正則表達式判斷無意開發效率太慢,在時間、成本、質量的博弈中必然會落后。所以把校驗層抽象出來是必然的結果,下面說下幾種解決方案。

二、幾種解決方案

1、struts2的valid可以通過配置xml,xml中描述規則和返回的信息,這種方式比較麻煩、開發效率低,不推薦

2、validation bean 是基于jsR-303標準開發出來的,使用注解方式實現,及其方便,但是這只是一個接口,沒有具體實現.Hibernate Validator是一個hibernate獨立的包,可以直接引用,他實現了validation bean同時有做了擴展,比較強大 ,實現圖如下:

點此查看中文官方手冊

3、oval 是一個可擴展的java對象數據驗證框架,驗證的規則可以通過配置文件、Annotation、POJOs 進行設定。可以使用純 Java 語言、javascript 、Groovy 、BeanShell 等進行規則的編寫,本次不過多講解

三、bean validation 框架驗證介紹

bean validation 包放在maven上維護,最新包的坐標如下:

javax.validation

validation-api

1.1.0.Final

點擊這里查看最新的坐標地址

下載之后打開這個包,有個package叫constraints,里面放的就是驗證的的注解:

下面開始用代碼實踐一下:

1、定義一個待驗證的bean:Student.java

package com.shishang;

import javax.validation.constraints.*;

import java.io.Serializable;

import java.math.BigDecimal;

import java.util.Date;

public class Student implements Serializable {

@NotNull(message = "名字不能為空")

private String name;

@Size(min = 6,max = 30,message = "地址應該在6-30字符之間")

private String address;

@DecimalMax(value = "100.00",message = "體重有些超標哦")

@DecimalMin(value = "60.00",message = "多吃點飯吧")

private BigDecimal weight;

private String friendName;

@AssertTrue

private Boolean isHaveFriend(){

return friendName != null?true:fwww.cppcns.comalse;

}

@Future(message = "生日必須在當前實踐之前")

private Date birthday;

@Pattern(regexp = "^(.+)@(.+)$",message = "郵箱的格式不合法")

private String email;

2、測試類:StudentTest.java

package com.use;

import javax.validation.ConstraintViolation;

import javax.validation.Validation;

import javax.validation.Validator;

import javax.validation.ValidatorFactory;

import java.io.Serializable;

import java.math.BigDecimal;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.Set;

public class StudentTest implements Serializable {

public static void main(String[] args) {

Student xiaoming = getBean();

List validate = validate(xiaoming);

validate.forEach(row -> {

System.out.println(row.toString());

});

}

private static Student getBean() {

Student bean = new Student();

bean.setName(null);

bean.setAddress("北京");

bean.setBirthday(new Date());

bean.setFriendName(null);

bean.setWeight(new BigDecimal(30));

bean.setEmail("xiaogangfan163.com");

return bean;

}

private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

public static List validate(T t) {

Validator validaYtIDqItigotor = factory.getValidator();

Set> constraintViolations = validator.validate(t);

List messageList = new ArrayList<>();

for (ConstraintViolation constraintViolation : constraintViolations) {

messageList.add(constraintViolation.getMessage());

}

return messageList;

}

}

3、運行testValidation()方法,輸處如下:

地址應該在6-30字符之間

郵箱的格式不合法

生日必須在當前時間之前

多吃點飯吧

名字不能為空

4、總結

像@NotNull、@Size等比較簡單也易于理解,不多說

因為bean validation只提供了接口并未實現,使用時需要加上一個provider的包,例如hibernate-validator

@Pattern 因為這個是正則,所以能做的事情比較多,比如中文還是數字、郵箱、長度等等都可以做

@AssertTRue 這個與其他的校驗注解有著本質的區別,這個注解適用于多個字段。例子中isHaveFriend方法依賴friendName字段校驗

驗證的api是經過我加工了一下,這樣可以批量返回校驗的信息

有時我們需要的注解可能沒有提供,這時候就需要自定義注解,寫實現類,下面說一下自定義注解的使用

四、自定義bean 編程客棧validation 注解驗證

有時框架自帶的沒法滿足我們的需求,這時就需要自己動手豐衣足食了,恩恩 ,這個不難,下面說下。

這個例子驗證字符串是大寫還是小寫約束標注,代碼如下:

1、枚舉類型CaseMode, 來表示大寫或小寫模式

package com.defineconstrain;

/**

* created by xiaogangfan

* on 16/10/25.

*/

public enum CaseMode {

UPPER,

LOWER;

}

2、定義一個CheckCase的約束標注

package com.defineconstrain;

/**

* created by xiaogangfan

* on 16/10/25.

*/

import static java.lang.annotation.ElementType.*;

import static java.lang.annotation.RetentionPolicy.*;

import java.lang.annotation.Documented;

import java.lang.annotation.Retention;

import java.lang.annotation.Target;

import javax.validation.Constraint;

import javax.validation.Payload;

@Target( { METHOD, FIELD, ANNOTATION_TYPE })

@Retention(RUNTIME)

@Constraint(validatedBy = CheckCaseValidator.class)

@Documented

public @interface CheckCase {

String message() default "{com.mycompany.constraints.checkcase}";

Class>[] groups() default {};

Class extends Payload>[] payload() default {};

CaseMode value();

}

3、約束條件CheckCase的驗證器

package com.defineconstrain;

/**

* created by xiaogangfan

* on 16/10/25.

*/

import javax.validation.ConstraintValidator;

import javax.validation.ConstraintValidatorContext;

public class CheckCaseValidator implements ConstraintValidator {

private CaseMode caseMode;

public void initialize(CheckCase constraintAnnotation) {

this.caseMode = constraintAnnotation.value();

}

public boolean isValid(String object, ConstraintValidatorContext constraintContext) {

www.cppcns.com if (object == null)

return true;

if (caseMode == CaseMode.UPPER)

return object.equals(object.toUpperCase());

else

return object.equals(object.toLowerCase());

}

}

4、在Student.java中增加一個屬性

@CheckCase(value = CaseMode.LOWER,message = "名字的拼音需要小寫")

private String spellName;

5、在StudentTest.java的getBean()方法中增加一行

bean.setSpellName("XIAOGANGFAN");

6、運行testValidation()方法,輸處如下:

地址應該在6-30字符之間

郵箱的格式不合法

生日必須在當前時間之前

多吃點飯吧

名字的拼音需要小寫

名字不能為空

7、說明新增的約束生效了,大功告成

代碼下載地址:git@github.com:xiaogangfan/vaidation.git

命令: git clone git@github.com:xiaogangfan/vaidation.git

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。

本文標題: java validation 后臺參數驗證的使用詳解

本文地址: http://www.cppcns.com/ruanjian/java/207528.html

總結

以上是生活随笔為你收集整理的java后台验证不能为空_java validation 后台参数验证的使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。