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

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

Oct 20, 2017 am 09:47 AM
java validation 確認する

この記事では主に 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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Feb 07, 2025 pm 12:11 PM

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。

See all articles