クラス ModelAttributeMethodProcessor
- 実装されたすべてのインターフェース:
HandlerMethodArgumentResolver
,HandlerMethodReturnValueHandler
- 既知の直属サブクラス
ServletModelAttributeMethodProcessor
@ModelAttribute
アノテーション付きメソッド引数を解決し、@ModelAttribute
アノテーション付きメソッドからの戻り値を処理します。 モデル属性は、モデルから取得されるか、デフォルトのコンストラクターで作成されます(そしてモデルに追加されます)。作成された属性は、サーブレットリクエストパラメーターへのデータバインディングを介して入力されます。引数に @jakarta.validation.Valid
のアノテーションが付けられている場合、検証を適用できます。または Spring 自身の @org.springframework.validation.annotation.Validated
。
このハンドラーが annotationNotRequired=true
で作成された場合、非単純型の引数と戻り値は、@ModelAttribute
の有無にかかわらずモデル属性と見なされます。
- 導入:
- 3.1
- 作成者:
- Rossen Stoyanchev, Juergen Hoeller, Sebastien Deleuze, Vladislav Kisel
フィールドサマリー
コンストラクターのサマリー
メソッドのサマリー
修飾子と型メソッド説明protected void
bindRequestParameters
(WebDataBinder binder, NativeWebRequest request) リクエストをターゲットオブジェクトにバインドする拡張ポイント。protected ObjectSE
constructAttribute
(ConstructorSE<?> ctor, StringSE attributeName, MethodParameter parameter, WebDataBinderFactory binderFactory, NativeWebRequest webRequest) 指定されたコンストラクターで新しい属性インスタンスを構築します。protected ObjectSE
createAttribute
(StringSE attributeName, MethodParameter parameter, WebDataBinderFactory binderFactory, NativeWebRequest webRequest) モデルで検出されない場合にモデル属性を作成するための拡張ポイント。Bean プロパティを介した後続のパラメーターバインド(抑制されていない限り)。void
handleReturnValue
(ObjectSE returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) NULL 以外の戻り値をModelAndViewContainer
に追加します。protected boolean
isBindExceptionRequired
(MethodParameter parameter) 検証エラーで致命的なバインド例外を発生させるかどうか。protected boolean
isBindExceptionRequired
(WebDataBinder binder, MethodParameter parameter) 検証エラーで致命的なバインド例外を発生させるかどうか。final ObjectSE
resolveArgument
(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) モデルから引数を解決するか、見つからない場合は、デフォルトが使用可能な場合はそれをインスタンス化します。resolveConstructorArgument
(StringSE paramName, ClassSE<?> paramType, NativeWebRequest request) boolean
supportsParameter
(MethodParameter parameter) パラメーターにModelAttribute
のアノテーションが付いている場合、またはデフォルトの解決モードの場合、単純型ではないメソッドパラメーターの場合、true
を返します。boolean
supportsReturnType
(MethodParameter returnType) メソッドレベルの@ModelAttribute
が存在する場合はtrue
を返します。デフォルトの解決モードでは、単純型ではない戻り値の型に対してはtrue
を返します。protected void
validateIfApplicable
(WebDataBinder binder, MethodParameter parameter) 該当する場合、モデル属性を検証します。protected void
validateValueIfApplicable
(WebDataBinder binder, MethodParameter parameter, ClassSE<?> targetType, StringSE fieldName, ObjectSE value) 該当する場合、指定された候補値を検証します。
フィールドの詳細
logger
コンストラクターの詳細
ModelAttributeMethodProcessor
public ModelAttributeMethodProcessor(boolean annotationNotRequired) クラスコンストラクター。- パラメーター:
annotationNotRequired
- "true" の場合、非単純メソッドの引数と戻り値は、@ModelAttribute
アノテーションの有無にかかわらずモデル属性と見なされます
メソッドの詳細
supportsParameter
パラメーターにModelAttribute
のアノテーションが付いている場合、またはデフォルトの解決モードの場合、単純型ではないメソッドパラメーターの場合、true
を返します。- 次で指定:
- インターフェース
HandlerMethodArgumentResolver
のsupportsParameter
- パラメーター:
parameter
- チェックするメソッドパラメーター- 戻り値:
- このリゾルバーが提供されたパラメーターをサポートする場合、
true
。それ以外の場合はfalse
resolveArgument
@Nullable public final ObjectSE resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws ExceptionSE モデルから引数を解決するか、見つからない場合は、デフォルトが使用可能な場合はそれをインスタンス化します。次に、データバインディングを介してモデル属性にリクエスト値が入力され、@java.validation.Valid
が引数に存在する場合はオプションで検証されます。- 次で指定:
- インターフェース
HandlerMethodArgumentResolver
のresolveArgument
- パラメーター:
parameter
- 解決するメソッドパラメーター。このパラメーターは、true
を返さなければならないHandlerMethodArgumentResolver.supportsParameter(org.springframework.core.MethodParameter)
に事前に渡されている必要があります。mavContainer
- 現在のリクエストの ModelAndViewContainerwebRequest
- 現在のリクエスト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
リクエストをターゲットオブジェクトにバインドする拡張ポイント。- パラメーター:
binder
- バインディングに使用するデータバインダーインスタンスrequest
- 現在のリクエスト
resolveConstructorArgument
@Nullable public ObjectSE resolveConstructorArgument(StringSE paramName, ClassSE<?> paramType, NativeWebRequest request) throws ExceptionSE - 例外:
ExceptionSE
validateIfApplicable
該当する場合、モデル属性を検証します。デフォルトの実装では、
@jakarta.validation.Valid
、Spring のValidated
、名前が "Valid" で始まるカスタムアノテーションをチェックします。- パラメーター:
binder
- 使用する DataBinderparameter
- メソッドのパラメーター宣言- 関連事項:
validateValueIfApplicable
protected void validateValueIfApplicable(WebDataBinder binder, MethodParameter parameter, ClassSE<?> targetType, StringSE fieldName, @Nullable ObjectSE value) 該当する場合、指定された候補値を検証します。デフォルトの実装では、
@jakarta.validation.Valid
、Spring のValidated
、名前が "Valid" で始まるカスタムアノテーションをチェックします。- パラメーター:
binder
- 使用する DataBinderparameter
- メソッドのパラメーター宣言targetType
- ターゲット型fieldName
- フィールドの名前value
- 候補値- 導入:
- 5.1
- 関連事項:
isBindExceptionRequired
検証エラーで致命的なバインド例外を発生させるかどうか。デフォルトの実装は
isBindExceptionRequired(MethodParameter)
に委譲します。- パラメーター:
binder
- データバインディングの実行に使用されるデータバインダーparameter
- メソッドのパラメーター宣言- 戻り値:
- 次のメソッドパラメーターが型
Errors
でない場合、true
- 関連事項:
isBindExceptionRequired
検証エラーで致命的なバインド例外を発生させるかどうか。- パラメーター:
parameter
- メソッドのパラメーター宣言- 戻り値:
- 次のメソッドパラメーターが型
Errors
でない場合、true
- 導入:
- 5.0
supportsReturnType
メソッドレベルの@ModelAttribute
が存在する場合はtrue
を返します。デフォルトの解決モードでは、単純型ではない戻り値の型に対してはtrue
を返します。- 次で指定:
- インターフェース
HandlerMethodReturnValueHandler
のsupportsReturnType
- パラメーター:
returnType
- チェックするメソッドの戻り値の型- 戻り値:
- このハンドラーが提供された戻り値の型をサポートする場合、
true
。それ以外の場合はfalse
handleReturnValue
public void handleReturnValue(@Nullable ObjectSE returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws ExceptionSE NULL 以外の戻り値をModelAndViewContainer
に追加します。- 次で指定:
- インターフェース
HandlerMethodReturnValueHandler
のhandleReturnValue
- パラメーター:
returnValue
- ハンドラーメソッドから返された値returnType
- 戻り値の型。この型は、true
を返さなければならないHandlerMethodReturnValueHandler.supportsReturnType(org.springframework.core.MethodParameter)
に事前に渡されている必要があります。mavContainer
- 現在のリクエストの ModelAndViewContainerwebRequest
- 現在のリクエスト- 例外:
ExceptionSE
- 戻り値の処理がエラーになる場合