クラス WebDataBinder

java.lang.ObjectSE
org.springframework.validation.DataBinder
org.springframework.web.bind.WebDataBinder
実装されたすべてのインターフェース:
PropertyEditorRegistryTypeConverter
既知の直属サブクラス
ServletRequestDataBinderWebExchangeDataBinderWebRequestDataBinder

public class WebDataBinder extends DataBinder
Web リクエストパラメーターから JavaBean オブジェクトへのデータバインディング用の特別な DataBinder。Web 環境用に設計されていますが、サーブレット API に依存していません。ServletRequestDataBinder など、より具体的な DataBinder バリアントの基本クラスとして機能します。

警告 : データバインディングは、外部クライアントによるアクセスや変更を目的としていないオブジェクトグラフの部分を公開することにより、セキュリティの課題を引き起こす可能性があります。データバインディングの設計と使用は、セキュリティに関して慎重に検討する必要があります。詳細については、リファレンスマニュアルの Spring Web MVC および Spring WebFlux のデータバインディングに関する専用セクションを参照してください。

HTML チェックボックスと選択オプションの一般的な問題に対処するフィールドマーカーのサポートが含まれています。フィールドがフォームの一部であるが、空であるためにリクエストパラメーターを生成しなかったことを検出します。フィールドマーカーを使用すると、その状態を検出し、それに応じて対応する Bean プロパティをリセットできます。他の方法では存在しないパラメーターのデフォルト値は、空以外のフィールドの値を指定できます。

導入:
1.2
作成者:
Juergen Hoeller, Scott Andrews, Brian Clozel
関連事項:
  • フィールドの詳細

    • DEFAULT_FIELD_MARKER_PREFIX

      public static final StringSE DEFAULT_FIELD_MARKER_PREFIX
      フィールドマーカーパラメーターが始まるデフォルトの接頭辞、その後にフィールド名が続きます。"_subscribeToNewsletter" フィールドの "subscribeToNewsletter"。

      このようなマーカーパラメーターは、フィールドが表示されていたこと、つまり、送信を引き起こしたフォームに存在していたことを示しています。対応するフィールド値パラメーターが見つからなかった場合、フィールドはリセットされます。この場合、フィールドマーカーパラメーターの値は重要ではありません。任意の値を使用できます。これは、HTML チェックボックスと選択オプションに特に役立ちます。

      関連事項:
    • DEFAULT_FIELD_DEFAULT_PREFIX

      public static final StringSE DEFAULT_FIELD_DEFAULT_PREFIX
      フィールドのデフォルトパラメーターが始まるデフォルトの接頭辞の後にフィールド名が続きます。"!subscribeToNewsletter" フィールドの "!subscribeToNewsletter"。

      デフォルトパラメーターは、空の値ではなくデフォルト値を提供するという点でフィールドマーカーとは異なります。

      関連事項:
  • コンストラクターの詳細

    • WebDataBinder

      public WebDataBinder(@Nullable ObjectSE target)
      デフォルトのオブジェクト名で、新しい WebDataBinder インスタンスを作成します。
      パラメーター:
      target - バインドするターゲットオブジェクト (または、バインダーが単なるパラメーター値の変換に使用される場合は null )
      関連事項:
    • WebDataBinder

      public WebDataBinder(@Nullable ObjectSE target, StringSE objectName)
      新しい WebDataBinder インスタンスを作成します。
      パラメーター:
      target - バインドするターゲットオブジェクト (または、バインダーが単なるパラメーター値の変換に使用される場合は null )
      objectName - ターゲットオブジェクトの名前
  • メソッドの詳細

    • setFieldMarkerPrefix

      public void setFieldMarkerPrefix(@Nullable StringSE fieldMarkerPrefix)
      空の可能性のあるフィールドをマークするパラメーターに使用できる接頭辞を指定します。名前には「接頭辞 + フィールド」を使用します。このようなマーカーパラメーターは存在によってチェックされます。たとえば、「可視」など、任意の値を送信できます。これは、HTML チェックボックスと選択オプションに特に役立ちます。

      "_FIELD" パラメーターのデフォルトは "_" です( "_subscribeToNewsletter" など)。空のフィールドチェックを完全にオフにする場合は、これを null に設定します。

      HTML チェックボックスは、チェックされたときにのみ値を送信するため、以前にチェックされたボックスがチェックされていないことを検出することはできません。少なくとも、標準の HTML の方法ではできません。

      これに対処する 1 つの方法は、フォームにチェックボックスが表示されていることがわかっている場合はチェックボックスパラメーター値を探し、値が見つからない場合はチェックボックスをリセットすることです。Spring Web MVC では、これは通常、カスタム onBind 実装で発生します。

      この自動リセットメカニズムは、マーカーパラメーターが "subscribeToNewsletter" フィールドの "_subscribeToNewsletter" のように各チェックボックスフィールドに送信されるという条件で、この欠陥に対処します。いずれの場合でもマーカーパラメーターが送信されるため、データバインダーは空のフィールドを検出して、その値を自動的にリセットできます。

      関連事項:
    • getFieldMarkerPrefix

      @Nullable public StringSE getFieldMarkerPrefix()
      空の可能性があるフィールドをマークするパラメーターのプレフィックスを返します。
    • setFieldDefaultPrefix

      public void setFieldDefaultPrefix(@Nullable StringSE fieldDefaultPrefix)
      名前として「接頭辞 + フィールド」を持つ、デフォルト値フィールドを示すパラメーターに使用できる接頭辞を指定します。デフォルトのフィールドの値は、フィールドが指定されていない場合に使用されます。

      "!FIELD" パラメーターのデフォルトは "!" です(例: "!subscribeToNewsletter" )。フィールドのデフォルトを完全にオフにする場合は、これを null に設定します。

      HTML チェックボックスは、チェックされたときにのみ値を送信するため、以前にチェックされたボックスがチェックされていないことを検出することはできません。少なくとも、標準の HTML の方法ではできません。デフォルトのフィールドは、チェックボックスが非ブール値を表す場合に特に役立ちます。

      デフォルトパラメーターが存在すると、指定されたフィールドのフィールドマーカーの動作が横取りされます。

      関連事項:
    • getFieldDefaultPrefix

      @Nullable public StringSE getFieldDefaultPrefix()
      デフォルトのフィールドをマークするパラメーターのプレフィックスを返します。
    • setBindEmptyMultipartFiles

      public void setBindEmptyMultipartFiles(boolean bindEmptyMultipartFiles)
      空の MultipartFile パラメーターをバインドするかどうかを設定します。デフォルトは "true" です。

      ユーザーが別のファイルを選択せずにフォームを再送信するときに、すでにバインドされている MultipartFile を保持する場合は、これをオフにします。そうでない場合、すでにバインドされている MultipartFile は空の MultipartFile ホルダーに置き換えられます。

      関連事項:
    • isBindEmptyMultipartFiles

      public boolean isBindEmptyMultipartFiles()
      空の MultipartFile パラメーターをバインドするかどうかを返します。
    • resolvePrefixValue

      @Nullable protected ObjectSE resolvePrefixValue(StringSE name, ClassSE<?> type, BiFunctionSE<StringSE,ClassSE<?>,ObjectSE> resolver)
      getFieldDefaultPrefix() または getFieldMarkerPrefix() が先頭に付加されている場合に値を解決できるかどうかを確認します。
      パラメーター:
      name - 解決する値の名前
      type - 期待される値の型
      resolver - チェックに使用するデリゲートリゾルバー
      戻り値:
      解決された値、または null
      導入:
      6.1
    • doBind

      protected void doBind(MutablePropertyValues mpvs)
      この実装は、スーパークラスバインディングプロセスに委譲する前に、フィールドのデフォルトとマーカーチェックを実行します。
      オーバーライド:
      クラス DataBinderdoBind 
      パラメーター:
      mpvs - MutablePropertyValues インスタンスとしてバインドするプロパティ値
      関連事項:
    • checkFieldDefaults

      protected void checkFieldDefaults(MutablePropertyValues mpvs)
      フィールドのデフォルト、つまりフィールドのデフォルトの接頭辞で始まるフィールドについて、指定されたプロパティ値を確認します。

      フィールドのデフォルトの存在は、フィールドが他に存在しない場合、指定された値を使用する必要があることを示します。

      パラメーター:
      mpvs - バインドされるプロパティ値 (変更可能)
      関連事項:
    • checkFieldMarkers

      protected void checkFieldMarkers(MutablePropertyValues mpvs)
      フィールドマーカー、つまりフィールドマーカープレフィックスで始まるフィールドの指定されたプロパティ値を確認します。

      フィールドマーカーの存在は、指定されたフィールドがフォームに存在したことを示します。プロパティ値に対応するフィールド値が含まれていない場合、フィールドは空と見なされ、適切にリセットされます。

      パラメーター:
      mpvs - バインドされるプロパティ値 (変更可能)
      関連事項:
    • adaptEmptyArrayIndices

      protected void adaptEmptyArrayIndices(MutablePropertyValues mpvs)
      "[]" で終わる名前のプロパティ値を確認してください。これは、明示的なインデックス値のない配列構文のために一部のクライアントによって使用されます。そのような値が見つかった場合は、括弧を削除して、データバインディングの目的で同じ値を表現する予想される方法に適合させます。
      パラメーター:
      mpvs - バインドされるプロパティ値 (変更可能)
      導入:
      5.3
    • getEmptyValue

      @Nullable protected ObjectSE getEmptyValue(StringSE field, @Nullable ClassSE<?> fieldType)
      指定されたフィールドの空の値を判別します。

      デフォルトの実装は、フィールド型が既知の場合は getEmptyValue(Class) に委譲し、それ以外の場合は null にフォールバックします。

      パラメーター:
      field - フィールドの名前
      fieldType - フィールドの型
      戻り値:
      空の値 (ほとんどのフィールド: null)
    • getEmptyValue

      @Nullable public ObjectSE getEmptyValue(ClassSE<?> fieldType)
      指定されたフィールドの空の値を判別します。

      デフォルトの実装は次を返します:

      • ブールフィールドの Boolean.FALSE 
      • 配列型の空の配列
      • コレクション型のコレクション実装
      • マップ型のマップ実装
      • それ以外の場合、null がデフォルトとして使用されます
      パラメーター:
      fieldType - フィールドの型
      戻り値:
      空の値 (ほとんどのフィールド: null)
      導入:
      5.0
    • bindMultipart

      protected void bindMultipart(MapSE<StringSE,ListSE<MultipartFile>> multipartFiles, MutablePropertyValues mpvs)
      特定のリクエストに含まれるすべてのマルチパートファイルをバインドします(マルチパートリクエストの場合)。サブクラスによって呼び出されます。

      マルチパートファイルは、空でない場合、または空のマルチパートファイルもバインドするように構成されている場合にのみ、プロパティ値に追加されます。

      パラメーター:
      multipartFiles - フィールド名文字列の MultipartFile オブジェクトへのマップ
      mpvs - バインドされるプロパティ値 (変更可能)
      関連事項: