ホームページ Java &#&チュートリアル SpringMVC学習シリーズ(6) データ検証

SpringMVC学習シリーズ(6) データ検証

Mar 03, 2017 am 10:58 AM
springmvc

シリーズ (SpringMVC学習シリーズ(6) データ検証) と (SpringMVC学習シリーズ(6) データ検証) では、データをバインドする方法を説明しました。データをバインドした後、取得したデータの正確性を確認するにはどうすればよいでしょうか。これがこの記事で説明する内容です —> データ検証。

ここでは検証に Hibernate-validator を使用します。Hibernate-validator は JSR-SpringMVC学習シリーズ(6) データ検証0SpringMVC学習シリーズ(6) データ検証 検証フレームワークを実装し、アノテーション スタイルの検証をサポートします。まず、http://www.php.cn/ にアクセスして、必要な jar パッケージをダウンロードする必要があります。ここでは、解凍後の SpringMVC学習シリーズ(6) データ検証.SpringMVC学習シリーズ(6) データ検証.SpringMVC学習シリーズ(6) データ検証.Final と、hibernate-validator-SpringMVC学習シリーズ(6) データ検証.SpringMVC学習シリーズ(6) データ検証.SpringMVC学習シリーズ(6) データ検証.Final を使用します。 jboss-logging-SpringMVC学習シリーズ(6) データ検証.SpringMVC学習シリーズ(6) データ検証 SpringMVC学習シリーズ(6) データ検証 つのパッケージ .0.jar および validation-api-SpringMVC学習シリーズ(6) データ検証.0.0.GA.jar がプロジェクトに追加されます。

前のプロジェクトで springservlet-config.xml ファイルを次のように構成します:

<!-- 默认的注解映射的支持 -->  
    <annotation-driven></annotation-driven>
    
    <bean>
        <property></property>
        <!--不设置则默认为classpath下的 ValidationMessages.properties -->
        <property></property>
    </bean>
    <bean></bean>
    <bean>  
        <property></property>  
        <property></property>  
        <property></property>  
    </bean>
ログイン後にコピー


where property name="basename" value="classpath:validatemessages" />classpath:validatemessages は、アノテーション検証メッセージが配置されているファイルであり、リソース フォルダーの下に追加する必要があります。

次の内容を含む ValidateController.java を com.demo.web.controllers パッケージに追加します:

package com.demo.web.controllers;import java.security.NoSuchAlgorithmException;import javax.validation.Valid;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.validation.BindingResult;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.demo.web.models.ValidateModel;

@Controller
@RequestMapping(value = "/validate")public class ValidateController {
    
    @RequestMapping(value="/test", method = {RequestMethod.GET})    public String test(Model model){        if(!model.containsAttribute("contentModel")){
            model.addAttribute("contentModel", new ValidateModel());
        }        return "validatetest";
    }
    
    @RequestMapping(value="/test", method = {RequestMethod.POST})    public String test(Model model, @Valid @ModelAttribute("contentModel") ValidateModel validateModel, BindingResult result) throws NoSuchAlgorithmException{        
        //如果有验证错误 返回到form页面
        if(result.hasErrors())            return test(model);        return "validatesuccess";     
    }
    
}
ログイン後にコピー


ここで @Valid @ModelAttribute("contentModel") ValidateModel validateModel の @Valid は Validate を意味しますデータを @ModelAttribute("contentModel") にバインドした後。

次の内容を含む ValidateModel.java を com.demo.web.models パッケージに追加します。

package com.demo.web.models;import org.hibernate.validator.constraints.Email;import org.hibernate.validator.constraints.NotEmpty;import org.hibernate.validator.constraints.Range;public class ValidateModel{
    
    @NotEmpty(message="{name.not.empty}")    private String name;
    @Range(min=0, max=SpringMVC学習シリーズ(6) データ検証SpringMVC学習シリーズ(6) データ検証0,message="{age.not.inrange}")    private String age;
    @NotEmpty(message="{email.not.empty}")
    @Email(message="{email.not.correct}")    private String email;    
    public void setName(String name){        this.name=name;
    }    public void setAge(String age){        this.age=age;
    }    public void setEmail(String email){        this.email=email;
    }    
    public String getName(){        return this.name;
    }    public String getAge(){        return this.age;
    }    public String getEmail(){        return this.email;
    }
    
}
ログイン後にコピー


注釈検証メッセージが存在するファイル、つまり validatemessages.properties ファイルに次の内容を追加します。

name.not.empty=\uSpringMVC学習シリーズ(6) データ検証SpringMVC学習シリーズ(6) データ検証0D\u79F0\uSpringMVC学習シリーズ(6) データ検証E0D\u80FD\uSpringMVC学習シリーズ(6) データ検証ESpringMVC学習シリーズ(6) データ検証A\u7A7A\uSpringMVC学習シリーズ(6) データ検証00SpringMVC学習シリーズ(6) データ検証
age.not.inrange=\uSpringMVC学習シリーズ(6) データ検証E7SpringMVC学習シリーズ(6) データ検証\u9F8SpringMVC学習シリーズ(6) データ検証\u8D8SpringMVC学習シリーズ(6) データ検証\uSpringMVC学習シリーズ(6) データ検証SpringMVC学習シリーズ(6) データ検証FA\u8SpringMVC学習シリーズ(6) データ検証0SpringMVC学習シリーズ(6) データ検証\uSpringMVC学習シリーズ(6) データ検証6FSpringMVC学習シリーズ(6) データ検証\uSpringMVC学習シリーズ(6) データ検証00SpringMVC学習シリーズ(6) データ検証
email.not.correct=\u90AE\u7BBSpringMVC学習シリーズ(6) データ検証\uSpringMVC学習シリーズ(6) データ検証7SpringMVC学習シリーズ(6) データ検証0\uSpringMVC学習シリーズ(6) データ検証7SpringMVC学習シリーズ(6) データ検証0\uSpringMVC学習シリーズ(6) データ検証E0D\u6B6SpringMVC学習シリーズ(6) データ検証\u786E\uSpringMVC学習シリーズ(6) データ検証00SpringMVC学習シリーズ(6) データ検証
email.not.empty=\u7SpringMVC学習シリーズ(6) データ検証SpringMVC学習シリーズ(6) データ検証SpringMVC学習シリーズ(6) データ検証\uSpringMVC学習シリーズ(6) データ検証BSpringMVC学習シリーズ(6) データ検証0\u90AE\uSpringMVC学習シリーズ(6) データ検証EF6\uSpringMVC学習シリーズ(6) データ検証E0D\u80FD\u60DF\u60SpringMVC学習シリーズ(6) データ検証0\uSpringMVC学習シリーズ(6) データ検証00SpringMVC学習シリーズ(6) データ検証
ログイン後にコピー


ここで、name.not.empty などは、それぞれ ValidateModel.java ファイルの message="xxx" の xxx 名に対応します。 以下の内容は、中国語を入力するときに自動的に変換される ASCII コードです。もちろん、プロンプトの内容として xxx を直接記述することもでき、別の validatemessages.properties ファイルを作成して追加する必要はありませんが、ハードコーディングされている場合は国際化する方法がないため、これは誤りです。

SpringMVC学習シリーズ(6) データ検証 つのビュー、validatetest.jsp と validatesuccess.jsp をビュー フォルダーに追加します。内容は次のとおりです。

nbsp;html PUBLIC "-//WSpringMVC学習シリーズ(6) データ検証C//DTD HTML SpringMVC学習シリーズ(6) データ検証.0SpringMVC学習シリーズ(6) データ検証 Transitional//EN" "http://www.wSpringMVC学習シリーズ(6) データ検証.org/TR/htmlSpringMVC学習シリーズ(6) データ検証/loose.dtd"><meta><title>Insert title here</title>
    <form>     
        
        <errors></errors><br><br>
            
        name:<input><br>
        <errors></errors><br>
        
        age:<input><br>
        <errors></errors><br>
        
        email:<input><br>
        <errors></errors><br>

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


nbsp;html PUBLIC "-//WSpringMVC学習シリーズ(6) データ検証C//DTD HTML SpringMVC学習シリーズ(6) データ検証.0SpringMVC学習シリーズ(6) データ検証 Transitional//EN" "http://www.wSpringMVC学習シリーズ(6) データ検証.org/TR/htmlSpringMVC学習シリーズ(6) データ検証/loose.dtd"><meta><title>Insert title here</title>
    验证成功!
ログイン後にコピー


フォームが重要であることに注意してください。 validatetest.jsp ビュー内:form modelAttribute="contentModel"メソッド="post">modelAttribute="xxx"の後ろの名前xxxは、対応する @Valid @ModelAttribute("xxx") xxx の名前が一致していると、モデル データとエラー情報がバインドされません。

form:errors path="name">form:errors>次の場合、モデルの対応する属性のエラーメッセージが表示されます。 path ="*" は、モデルのすべての属性のエラー メッセージを表示します。

テストを実行します:

SpringMVC学習シリーズ(6) データ検証

直接送信をクリックします:

SpringMVC学習シリーズ(6) データ検証

設定が正しく行われていることを示すエラーメッセージが表示されます。

間違ったデータを送信してください:

SpringMVC学習シリーズ(6) データ検証

設定されたエラー メッセージが引き続き正しく表示されていることがわかります。

正しいデータを入力して送信してください:

SpringMVC学習シリーズ(6) データ検証

SpringMVC学習シリーズ(6) データ検証

検証が成功したことがわかります。

主な検証の注釈と手順は次のとおりです:

@Future

注釈

適用可能なデータタイプ

指示

@AssertFalse

Boolean、boolean

検証アノテーションの要素値はfalseです

@AssertTrue

Boolean、boolean

の要素値は true です

@DecimalMax(value=x)

BigDecimal、BigInteger、String、byte、short、int、long、およびプリミティブ型のそれぞれのラッパー: Number および CharSequence のサブタイプ。

アノテーションの要素値が @DecimalMax

@DecimalMin (value=x)

BigDecimal、BigInteger、String、byte で指定された値以下であることを検証します。 、short、int、long、およびプリミティブ型のそれぞれのラッパー: Number および CharSequence のサブタイプ。

アノテーションの要素値が、指定された値以下であることを確認します。 @DecimalMin

@Digits(integer=integer BigDecimal、BigInteger、String、byte、short、int、long、およびプリミティブ型のそれぞれのラッパー。さらに HV でサポートされています: Number および CharSequence のサブタイプ。

アノテーションの要素値の整数と小数点以下の最大桁数を確認します

java.util.Date、java.util.Calendar; 、Joda Time 日付/時刻 API が クラスパス上:ReadablePartial および ReadableInstant.

の実装、BigInteger、byte、short、int、long、およびプリミティブ型のそれぞれのラッパーが HV でさらにサポートされます:CharSequence のサブタイプ (文字シーケンスで表される数値)。 が評価されます)、Number.

の任意のサブタイプ、アノテーションの要素値が @Max

@Min (value=x) で指定された値以下であることを確認します。

BigDecimal、BigInteger、byte、short、int、long、およびプリミティブ型のそれぞれのラッパーが HV でさらにサポートされます: CharSequence のサブタイプ (char シーケンスで表される数値は 評価済み)、Number.

の任意のサブタイプ、アノテーションの要素値が @Min

@NotNull

任意のタイプで指定された値以上であることを検証します。

アノテーションを検証します 要素の値がnullではありません

@Null

任意の型

検証アノテーションの要素の値がnullです

@ Past

java.util.Date 、 java.util.Calendar; Joda Time 日付/時刻 API が有効な場合、HV によってさらにサポートされます。 クラスパス上: ReadablePartial および ReadableInstant の実装。

アノテーションの要素値 (日付型) が現在時刻よりも前であることを確認します

@Pattern(regex=regex, flag=)

String。HV でさらにサポートされています: CharSequence のサブタイプ。

注釈付きの要素の値が指定された正規表現と一致することを確認します

@Size(min=最小値、max=最大値)

String、Collection、Map、および配列。さらに HV でサポートされています: CharSequence のサブタイプ。

アノテーションの要素値が指定された min と max の範囲内にあることを確認します (文字数、コレクション サイズなど)

@Valid

非プリミティブ型 (参照型)

たとえば、関連付けられたオブジェクトを確認します。アカウントオブジェクト内のオブジェクトで、検証順序オブジェクトを指定します

@NotEmpty

CharSequence,CollectionMap and Arrays

アノテーションの要素値がnullでも空でもないことを確認してください(文字列の長さが0でなく、コレクションのサイズが0ではない)

@Range(min=最小値、max=最大値) value)

CharSequence、Collection、Map、Arrays、BigDecimal、BigInteger、CharSequence、byte、short、int、long、およびプリミティブ型のそれぞれのラッパーCharSequence, Collection, Map and Arrays,BigDecimal, BigInteger, CharSequence, byte, short, int, long and the respective wrappers of the primitive types

验证注解的元素值在最小值和最大值之间

@NotBlank

CharSequence

验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格

@Length(min=下限, max=上限)

CharSequence

验证注解的元素值长度在min和max区间内

@Email

CharSequence

アノテーションの要素値が最小値と最大値の間です

🎜@NotBlank🎜🎜🎜🎜🎜CharSequence🎜🎜🎜🎜 アノテーションの要素値が次であることを確認してください空ではない (最初のスペースを削除した後の null ではない) 長さは 0)、@NotEmpty とは異なり、@NotBlank は文字列にのみ適用され、比較中に文字列からスペースを削除します🎜🎜🎜🎜🎜🎜🎜@Length(min=下限、max=上限)🎜🎜🎜🎜🎜 CharSequence🎜🎜🎜🎜 アノテーションの要素値の長さが最小間隔と最大間隔の範囲内であることを確認してください🎜🎜🎜🎜🎜🎜🎜@Email🎜🎜 🎜🎜🎜CharSequence🎜🎜🎜🎜 検証アノテーションの要素値は Email です。正規表現とフラグを使用してカスタムの電子メール形式を指定することもできます。

詳細については、公式ドキュメントを参照してください: http://docs.jboss.org/hibernate/validator/SpringMVC学習シリーズ(6) データ検証.SpringMVC学習シリーズ(6) データ検証/reference/en-US/html/validator-usingvalidator.html

注:最初の SpringMVC学習シリーズ(6) データ検証SpringMVC学習シリーズ(6) データ検証 個の記事のサンプル コードが .project ファイルなしでパッケージ化およびアップロードされていたため、ダウンロード後に Eclipse に直接インポートして実行できなかった理由がわかりません。これらのサンプル コードはバックアップされていませんでしたが、コード ファイルはまだ存在しているため、新しい動的 Web プロジェクトを作成して、対応する構成ファイル、コントローラー、ビューをインポートできます。

上記は SpringMVC 学習シリーズ (6) - データ検証 の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

SpringBootとSpringMVCの比較と差異分析 SpringBootとSpringMVCの比較と差異分析 Dec 29, 2023 am 11:02 AM

SpringBoot と SpringMVC はどちらも Java 開発で一般的に使用されるフレームワークですが、それらの間には明らかな違いがいくつかあります。この記事では、これら 2 つのフレームワークの機能と使用法を調べ、その違いを比較します。まず、SpringBoot について学びましょう。 SpringBoot は、Spring フレームワークに基づいたアプリケーションの作成と展開を簡素化するために、Pivo​​tal チームによって開発されました。スタンドアロンの実行可能ファイルを構築するための高速かつ軽量な方法を提供します。

SpringBoot と SpringMVC の違いは何ですか? SpringBoot と SpringMVC の違いは何ですか? Dec 29, 2023 am 10:46 AM

SpringBoot と SpringMVC の違いは何ですか? SpringBoot と SpringMVC は、Web アプリケーションを構築するための 2 つの非常に人気のある Java 開発フレームワークです。これらは別々に使用されることが多いですが、両者の違いは明らかです。まず、SpringBoot は Spring フレームワークの拡張版または強化版とみなすことができます。 Spring アプリケーションの初期化と構成プロセスを簡素化し、開発者を支援するように設計されています。

SpringBoot と SpringMVC の違いは何ですか? SpringBoot と SpringMVC の違いは何ですか? Dec 29, 2023 pm 05:19 PM

SpringBootとSpringMVCはJava開発でよく使われるフレームワークで、どちらもSpringフレームワークで提供されていますが、機能や使用方法にいくつかの違いがあります。この記事では、SpringBootとSpringMVCそれぞれの特徴と違いを紹介します。 1. SpringBoot の特徴: 構成の簡素化: SpringBoot は、構成より規約の原則により、プロジェクトの構成プロセスを大幅に簡素化します。プロジェクトや開発者に必要なパラメータを自動的に設定できます。

springboot と springmvc の違いは何ですか springboot と springmvc の違いは何ですか Jun 07, 2023 am 10:10 AM

springboot と springmvc の違いは、1. 意味の違い、2. 構成の違い、3. 依存関係の違い、4. 開発時間の違い、5. 生産性の違い、6. JAR パッケージ化機能の実装方法の違い、7. バッチ処理の有無です。提供される機能、8. さまざまな機能、9. さまざまなコミュニティおよびドキュメントのサポート、10. デプロイメント記述子が必要かどうか。

spring と springmvc の違いは何ですか spring と springmvc の違いは何ですか Dec 29, 2023 pm 05:02 PM

spring と springmvc の違い: 1. 位置付けと機能、2. コア機能、3. アプリケーション領域、4. 拡張性。詳細な紹介: 1. 位置付けと機能 Spring は、依存関係の注入、アスペクト指向プログラミング、トランザクション管理などの機能を提供する包括的なアプリケーション開発フレームワークであり、エンタープライズ レベルのアプリケーションの開発を簡素化するように設計されており、Spring MVC はそのSpring フレームワーク。そのモジュールは Web アプリケーションの開発に使用され、MVC パターンを実装します。2. コア機能など。

Java API開発におけるWebサービス処理にSpringMVCを利用する Java API開発におけるWebサービス処理にSpringMVCを利用する Jun 17, 2023 pm 11:38 PM

インターネットの発展に伴い、Web サービスはますます一般的になってきています。アプリケーション プログラミング インターフェイスとして、JavaAPI はさまざまなアプリケーション シナリオに適応するために新しいバージョンを常にリリースしています。 SpringMVC は、人気のあるオープンソース フレームワークとして、Web アプリケーションを簡単に構築するのに役立ちます。この記事では、SpringMVC の設定、コントローラーの作成、使用方法など、JavaAPI 開発における Web サービス処理に SpringMVC を使用する方法を詳しく説明します。

JavaのSpringMVCインターセプターの使い方 JavaのSpringMVCインターセプターの使い方 May 13, 2023 pm 02:55 PM

インターセプタの役割 SpringMVC のインターセプタは、サーブレット開発におけるフィルタに似ており、プロセッサの前処理と後処理に使用されます。インターセプタが一定の順序でチェーン状に接続されており、このチェーンをインターセプタチェーン(InterceptorChain)と呼びます。インターセプトされたメソッドまたはフィールドにアクセスすると、インターセプター チェーン内のインターセプターが、以前に定義された順序で呼び出されます。インターセプターは、AOP のアイデアを具体的に実装したものでもあります。インターセプターとフィルターの違い: フィルター (フィルター) インターセプター (インターセプター) の使用範囲はサーブレット仕様の一部であり、任意の JavaWeb プロジェクトで使用できます。

SpringBoot と SpringMVC の類似点と相違点を比較する SpringBoot と SpringMVC の類似点と相違点を比較する Dec 29, 2023 am 08:30 AM

SpringBoot と SpringMVC の類似点と相違点の分析 SpringBoot と SpringMVC は、Java 分野では非常に重要な開発フレームワークです。どちらも Spring フレームワークの一部ですが、使用方法と機能には明らかな違いがいくつかあります。この記事では、SpringBoot と SpringMVC を比較し、それらの類似点と相違点を分析します。まず、SpringBoot について学びましょう。スプリングボー

See all articles