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

この記事では主に 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 サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール