ホームページ > Java > &#&チュートリアル > Java での検証バックグラウンド パラメーター検証の使用方法の詳細な説明

Java での検証バックグラウンド パラメーター検証の使用方法の詳細な説明

黄舟
リリース: 2017-10-20 09:47:32
オリジナル
2357 人が閲覧しました

この記事では主に Java バリデーションのバックグラウンドパラメータ検証の使用方法の詳細な説明を紹介していますが、編集者が非常に優れていると考えたので、参考として共有します。エディターをフォローして見てみましょう

1. はじめに

バックグラウンド開発プロセスにおいて、パラメータの検証は開発環境の不可欠な部分となっています。例えば、パラメータをnullにすることはできず、メールはメールの形式に準拠する必要があります。手動でif判定を行ったり、正規表現を書いて判定したりすると、開発効率が非常に遅くなり、時間の勝負にどうしても遅れてしまいます。 、コスト、そして品質。したがって、検証層を抽象化することは必然の結果です。以下にいくつかの解決策を示します。

2. いくつかの解決策

1. struts2 の検証は XML で記述されますが、この方法は面倒で開発効率が低くなります。

2. 検証 Bean は JSR-303 標準に基づいて開発されており、非常に便利なアノテーションを使用して実装されていますが、これは単なるインターフェイスであり、Hibernate Validator は Hibernate に依存しないパッケージです。検証 Bean を実装しており、拡張されており、比較的強力です。実装図は次のとおりです。

公式の中国語マニュアルを参照するには、ここをクリックしてください

3。検証フレームワーク。検証ルールは、設定ファイル、アノテーション、および POJO の設定を通じて実行できます。 Pure Java 言語、JavaScript、Groovy、BeanShell などを使用してルールを記述することができます。 今回はあまり説明しません。 3. Bean 検証フレームワークの検証の概要

Bean 検証パッケージは Maven 上で維持されます。最新のパッケージの内容は次のとおりです:

<dependency>

  <groupId>javax.validation</groupId>

  <artifactId>validation-api</artifactId>

  <version>1.1.0.Final</version>

</dependency>
ログイン後にコピー

ここをクリックして最新の座標アドレスを表示します


ダウンロード後、このパッケージを開きます。これには検証アノテーションが含まれています:

練習を始めましょう。コード:

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:false;
  }

  @Future(message = "生日必须在当前实践之前")
  private Date birthday;

  @Pattern(regexp = "^(.+)@(.+)$",message = "邮箱的格式不合法")
  private String email;


  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getAddress() {
    return address;
  }

  public void setAddress(String address) {
    this.address = address;
  }

  public BigDecimal getWeight() {
    return weight;
  }

  public void setWeight(BigDecimal weight) {
    this.weight = weight;
  }

  public String getFriendName() {
    return friendName;
  }

  public void setFriendName(String friendName) {
    this.friendName = friendName;
  }

  public Date getBirthday() {
    return birthday;
  }

  public void setBirthday(Date birthday) {
    this.birthday = birthday;
  }

  public String getEmail() {
    return email;
  }

  public void setEmail(String email) {
    this.email = 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<String> 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 <T> List<String> validate(T t) {
    Validator validator = factory.getValidator();
    Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);

    List<String> messageList = new ArrayList<>();
    for (ConstraintViolation<T> constraintViolation : constraintViolations) {
      messageList.add(constraintViolation.getMessage());
    }
    return messageList;
  }
}
ログイン後にコピー

3. testValidation() メソッドを実行します。は次のとおりです:


アドレスは6〜30文字である必要があります

  1. 電子メールの形式は違法です

  2. 誕生日は現在時刻より前である必要があります

  3. もっと食べ物を食べてください

  4. name は空にすることはできません

  5. 4. 概要

@NotNull や @Size などと同様、あまり言うことはありません

  1. なぜなら、Bean 検証はインターフェースを提供するだけですが、これを実装しないでください。使用するときは、hibernate-validator などのプロバイダー パッケージを追加する必要があります

  2. @Pattern これは通常のパターンであるため、中国語や数字、電子メール、長さなど、より多くのことを実行できます。

  3. @AssertTRUe これは他の検証アノテーションと基本的に同じですが、異なる点は、このアノテーションが複数のフィールドに適用されることです。この例では、isHaveFriend メソッドは friendsName フィールドの検証に依存しています

  4. 検証 API は私によって処理されているため、検証情報をバッチで返すことができます

  5. 必要なアノテーションが提供されない場合があります。次に、それをカスタマイズする必要があります アノテーション、実装クラスを作成します、カスタム アノテーションの使用について話しましょう

  6. IV. カスタム Bean の検証 アノテーションの検証

場合によっては、フレームワークの組み込みがニーズを満たせない場合があります。自分たちでやる必要があります。衣食住は十分にあります。はい、これは難しいことではありません。以下で説明しましょう。 この例では、文字列が大文字か小文字の制約アノテーションであるかを検証します。コードは次のとおりです:

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<CheckCase, String> {

  private CaseMode caseMode;

  public void initialize(CheckCase constraintAnnotation) {
    this.caseMode = constraintAnnotation.value();
  }

  public boolean isValid(String object, ConstraintValidatorContext constraintContext) {

    if (object == null)
      return true;

    if (caseMode == CaseMode.UPPER)
      return object.equals(object.toUpperCase());
    else
      return object.equals(object.toLowerCase());
  }

}
ログイン後にコピー

4. StudentTest.java

の getBean() メソッドに行を追加します。

@CheckCase(value = CaseMode.LOWER,message = "名字的拼音需要小写")
private String spellName;
ログイン後にコピー

6. testValidation() メソッドを実行すると、次のようなエラーが表示されます:

アドレスは 6 ~ 30 文字である必要があります


メールの形式は不正です


誕生日より前である必要があります現在時刻

  1. もっと食べ物を食べてください

  2. 名前のピンインは小文字にする必要があります

  3. 名前を空にすることはできません

以上がJava での検証バックグラウンド パラメーター検証の使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート