クラス ModelAttributeMethodProcessor

java.lang.ObjectSE
org.springframework.web.method.annotation.ModelAttributeMethodProcessor
実装されたすべてのインターフェース:
HandlerMethodArgumentResolverHandlerMethodReturnValueHandler
既知の直属サブクラス
ServletModelAttributeMethodProcessor

public class ModelAttributeMethodProcessor extends ObjectSE implements HandlerMethodArgumentResolver, HandlerMethodReturnValueHandler
@ModelAttribute アノテーション付きメソッド引数を解決し、@ModelAttribute アノテーション付きメソッドからの戻り値を処理します。

モデル属性は、モデルから取得されるか、デフォルトのコンストラクターで作成されます(そしてモデルに追加されます)。作成された属性は、サーブレットリクエストパラメーターへのデータバインディングを介して入力されます。引数に @jakarta.validation.Valid のアノテーションが付けられている場合、検証を適用できます。または Spring 自身の @org.springframework.validation.annotation.Validated

このハンドラーが annotationNotRequired=true で作成された場合、非単純型の引数と戻り値は、@ModelAttribute の有無にかかわらずモデル属性と見なされます。

導入:
3.1
作成者:
Rossen Stoyanchev, Juergen Hoeller, Sebastien Deleuze, Vladislav Kisel
  • フィールドの詳細

    • logger

      protected final Log logger
  • コンストラクターの詳細

    • ModelAttributeMethodProcessor

      public ModelAttributeMethodProcessor(boolean annotationNotRequired)
      クラスコンストラクター。
      パラメーター:
      annotationNotRequired - "true" の場合、非単純メソッドの引数と戻り値は、@ModelAttribute アノテーションの有無にかかわらずモデル属性と見なされます
  • メソッドの詳細

    • supportsParameter

      public boolean supportsParameter(MethodParameter parameter)
      パラメーターに ModelAttribute のアノテーションが付いている場合、またはデフォルトの解決モードの場合、単純型ではないメソッドパラメーターの場合、true を返します。
      次で指定:
      インターフェース HandlerMethodArgumentResolversupportsParameter 
      パラメーター:
      parameter - チェックするメソッドパラメーター
      戻り値:
      このリゾルバーが提供されたパラメーターをサポートする場合、true。それ以外の場合は false 
    • resolveArgument

      @Nullable public final ObjectSE resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws ExceptionSE
      モデルから引数を解決するか、見つからない場合は、デフォルトが使用可能な場合はそれをインスタンス化します。次に、データバインディングを介してモデル属性にリクエスト値が入力され、@java.validation.Valid が引数に存在する場合はオプションで検証されます。
      次で指定:
      インターフェース HandlerMethodArgumentResolverresolveArgument 
      パラメーター:
      parameter - 解決するメソッドパラメーター。このパラメーターは、true を返さなければならない HandlerMethodArgumentResolver.supportsParameter(org.springframework.core.MethodParameter) に事前に渡されている必要があります。
      mavContainer - 現在のリクエストの ModelAndViewContainer
      webRequest - 現在のリクエスト
      binderFactory - WebDataBinder インスタンスを作成するためのファクトリ
      戻り値:
      解決された引数値、または解決できない場合は null 
      例外:
      BindException - データバインディングと検証がエラーになり、次のメソッドパラメーターが Errors 型ではない場合
      ExceptionSE - WebDataBinder 初期化が失敗した場合
    • createAttribute

      protected ObjectSE createAttribute(StringSE attributeName, MethodParameter parameter, WebDataBinderFactory binderFactory, NativeWebRequest webRequest) throws ExceptionSE
      モデルで検出されない場合にモデル属性を作成するための拡張ポイント。Bean プロパティを介した後続のパラメーターバインド(抑制されていない限り)。

      デフォルトの実装では、通常、使用可能な場合は一意のパブリック no-arg コンストラクターを使用しますが、データクラスの「プライマリコンストラクター」アプローチも処理します。JavaBeans ConstructorProperties アノテーションと、バイトコード内のランタイム保持パラメーター名を理解し、リクエストパラメーターをコンストラクターに関連付けます。名前による引数。そのようなコンストラクターが見つからない場合は、setter メソッドを介した後続の Bean プロパティのバインドを想定して、デフォルトのコンストラクターが使用されます(パブリックでない場合でも)。

      パラメーター:
      attributeName - 属性の名前 (非 null)
      parameter - メソッドのパラメーター宣言
      binderFactory - WebDataBinder インスタンスを作成するため
      webRequest - 現在のリクエスト
      戻り値:
      作成されたモデル属性 (非 null)
      例外:
      BindException - コンストラクター引数バインディングの失敗の場合
      ExceptionSE - コンストラクター呼び出しが失敗した場合
      関連事項:
    • constructAttribute

      protected ObjectSE constructAttribute(ConstructorSE<?> ctor, StringSE attributeName, MethodParameter parameter, WebDataBinderFactory binderFactory, NativeWebRequest webRequest) throws ExceptionSE
      指定されたコンストラクターで新しい属性インスタンスを構築します。

      コンストラクターの解決後に createAttribute(String, MethodParameter, WebDataBinderFactory, NativeWebRequest) から呼び出されます。

      パラメーター:
      ctor - 使用するコンストラクター
      attributeName - 属性の名前 (非 null)
      binderFactory - WebDataBinder インスタンスを作成するため
      webRequest - 現在のリクエスト
      戻り値:
      作成されたモデル属性 (非 null)
      例外:
      BindException - コンストラクター引数バインディングの失敗の場合
      ExceptionSE - コンストラクター呼び出しが失敗した場合
      導入:
      5.1
    • bindRequestParameters

      protected void bindRequestParameters(WebDataBinder binder, NativeWebRequest request)
      リクエストをターゲットオブジェクトにバインドする拡張ポイント。
      パラメーター:
      binder - バインディングに使用するデータバインダーインスタンス
      request - 現在のリクエスト
    • resolveConstructorArgument

      @Nullable public ObjectSE resolveConstructorArgument(StringSE paramName, ClassSE<?> paramType, NativeWebRequest request) throws ExceptionSE
      例外:
      ExceptionSE
    • validateIfApplicable

      protected void validateIfApplicable(WebDataBinder binder, MethodParameter parameter)
      該当する場合、モデル属性を検証します。

      デフォルトの実装では、@jakarta.validation.Valid、Spring の Validated、名前が "Valid" で始まるカスタムアノテーションをチェックします。

      パラメーター:
      binder - 使用する DataBinder
      parameter - メソッドのパラメーター宣言
      関連事項:
    • validateValueIfApplicable

      protected void validateValueIfApplicable(WebDataBinder binder, MethodParameter parameter, ClassSE<?> targetType, StringSE fieldName, @Nullable ObjectSE value)
      該当する場合、指定された候補値を検証します。

      デフォルトの実装では、@jakarta.validation.Valid、Spring の Validated、名前が "Valid" で始まるカスタムアノテーションをチェックします。

      パラメーター:
      binder - 使用する DataBinder
      parameter - メソッドのパラメーター宣言
      targetType - ターゲット型
      fieldName - フィールドの名前
      value - 候補値
      導入:
      5.1
      関連事項:
    • isBindExceptionRequired

      protected boolean isBindExceptionRequired(WebDataBinder binder, MethodParameter parameter)
      検証エラーで致命的なバインド例外を発生させるかどうか。

      デフォルトの実装は isBindExceptionRequired(MethodParameter) に委譲します。

      パラメーター:
      binder - データバインディングの実行に使用されるデータバインダー
      parameter - メソッドのパラメーター宣言
      戻り値:
      次のメソッドパラメーターが型 Errors でない場合、true 
      関連事項:
    • isBindExceptionRequired

      protected boolean isBindExceptionRequired(MethodParameter parameter)
      検証エラーで致命的なバインド例外を発生させるかどうか。
      パラメーター:
      parameter - メソッドのパラメーター宣言
      戻り値:
      次のメソッドパラメーターが型 Errors でない場合、true 
      導入:
      5.0
    • supportsReturnType

      public boolean supportsReturnType(MethodParameter returnType)
      メソッドレベルの @ModelAttribute が存在する場合は true を返します。デフォルトの解決モードでは、単純型ではない戻り値の型に対しては true を返します。
      次で指定:
      インターフェース HandlerMethodReturnValueHandlersupportsReturnType 
      パラメーター:
      returnType - チェックするメソッドの戻り値の型
      戻り値:
      このハンドラーが提供された戻り値の型をサポートする場合、true。それ以外の場合は false 
    • handleReturnValue

      public void handleReturnValue(@Nullable ObjectSE returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws ExceptionSE
      NULL 以外の戻り値を ModelAndViewContainer に追加します。
      次で指定:
      インターフェース HandlerMethodReturnValueHandlerhandleReturnValue 
      パラメーター:
      returnValue - ハンドラーメソッドから返された値
      returnType - 戻り値の型。この型は、true を返さなければならない HandlerMethodReturnValueHandler.supportsReturnType(org.springframework.core.MethodParameter) に事前に渡されている必要があります。
      mavContainer - 現在のリクエストの ModelAndViewContainer
      webRequest - 現在のリクエスト
      例外:
      ExceptionSE - 戻り値の処理がエラーになる場合