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

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

黄舟
黄舟オリジナル
2017-03-03 10:58:111348ブラウズ

シリーズ (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 までご連絡ください。