public class ModelAttributeMethodProcessor extends ObjectSE implements HandlerMethodArgumentResolver, HandlerMethodReturnValueHandler
@ModelAttribute アノテーション付きメソッド引数を解決し、@ModelAttribute アノテーション付きメソッドからの戻り値を処理します。 モデル属性は、モデルから取得されるか、デフォルトのコンストラクターで作成されます(そしてモデルに追加されます)。作成された属性は、サーブレットリクエストパラメーターへのデータバインディングを介して入力されます。引数に @javax.validation.Valid のアノテーションが付けられている場合、検証を適用できます。または Spring 自身の @org.springframework.validation.annotation.Validated。
このハンドラーが annotationNotRequired=true で作成された場合、非単純型の引数と戻り値は、@ModelAttribute の有無にかかわらずモデル属性と見なされます。
| コンストラクターと説明 |
|---|
ModelAttributeMethodProcessor(boolean annotationNotRequired) クラスコンストラクター。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
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) 検証エラーで致命的なバインド例外を発生させるかどうか。 |
ObjectSE | resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) モデルから引数を解決するか、見つからない場合は、デフォルトが使用可能な場合はそれをインスタンス化します。 |
ObjectSE | 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) 該当する場合、指定された候補値を検証します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEprotected final Log logger
public ModelAttributeMethodProcessor(boolean annotationNotRequired)
annotationNotRequired - "true" の場合、非単純メソッドの引数と戻り値は、@ModelAttribute アノテーションの有無にかかわらずモデル属性と見なされます public boolean supportsParameter(MethodParameter parameter)
ModelAttribute のアノテーションが付いている場合、またはデフォルトの解決モードの場合、単純型ではないメソッドパラメーターの場合、true を返します。HandlerMethodArgumentResolver の supportsParameter parameter - チェックするメソッドパラメーター true。それ以外の場合は false @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 初期化が失敗した場合 protected ObjectSE createAttribute(StringSE attributeName, MethodParameter parameter, WebDataBinderFactory binderFactory, NativeWebRequest webRequest) throws ExceptionSE
デフォルトの実装では、通常、使用可能な場合は一意のパブリック no-arg コンストラクターを使用しますが、データクラスの「プライマリコンストラクター」アプローチも処理します。JavaBeans ConstructorProperties アノテーションと、バイトコード内のランタイム保持パラメーター名を理解し、リクエストパラメーターをコンストラクターに関連付けます。名前による引数。そのようなコンストラクターが見つからない場合は、setter メソッドを介した後続の Bean プロパティのバインドを想定して、デフォルトのコンストラクターが使用されます(パブリックでない場合でも)。
attributeName - 属性の名前 (非 null)parameter - メソッドのパラメーター宣言 binderFactory - WebDataBinder インスタンスを作成するため webRequest - 現在のリクエスト null)BindException - コンストラクター引数バインディングの失敗の場合 ExceptionSE - コンストラクター呼び出しが失敗した場合 constructAttribute(Constructor, String, MethodParameter, WebDataBinderFactory, NativeWebRequest), BeanUtils.findPrimaryConstructor(Class)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 - コンストラクター呼び出しが失敗した場合 protected void bindRequestParameters(WebDataBinder binder, NativeWebRequest request)
binder - バインディングに使用するデータバインダーインスタンス request - 現在のリクエスト @Nullable public ObjectSE resolveConstructorArgument(StringSE paramName, ClassSE<?> paramType, NativeWebRequest request) throws ExceptionSE
ExceptionSEprotected void validateIfApplicable(WebDataBinder binder, MethodParameter parameter)
デフォルトの実装では、@javax.validation.Valid、Spring の Validated、名前が "Valid" で始まるカスタムアノテーションをチェックします。
binder - 使用する DataBinderparameter - メソッドのパラメーター宣言 DataBinder.validate(Object...), SmartValidator.validate(Object, Errors, Object...)protected void validateValueIfApplicable(WebDataBinder binder, MethodParameter parameter, ClassSE<?> targetType, StringSE fieldName, @Nullable ObjectSE value)
デフォルトの実装では、@javax.validation.Valid、Spring の Validated、名前が "Valid" で始まるカスタムアノテーションをチェックします。
binder - 使用する DataBinderparameter - メソッドのパラメーター宣言 targetType - ターゲット型 fieldName - フィールドの名前 value - 候補値 validateIfApplicable(WebDataBinder, MethodParameter), SmartValidator.validateValue(Class, String, Object, Errors, Object...)protected boolean isBindExceptionRequired(WebDataBinder binder, MethodParameter parameter)
デフォルトの実装は isBindExceptionRequired(MethodParameter) に委譲します。
binder - データバインディングの実行に使用されるデータバインダー parameter - メソッドのパラメーター宣言 Errors でない場合、true isBindExceptionRequired(MethodParameter)protected boolean isBindExceptionRequired(MethodParameter parameter)
parameter - メソッドのパラメーター宣言 Errors でない場合、true public boolean supportsReturnType(MethodParameter returnType)
@ModelAttribute が存在する場合は true を返します。デフォルトの解決モードでは、単純型ではない戻り値の型に対しては true を返します。HandlerMethodReturnValueHandler の supportsReturnType returnType - チェックするメソッドの戻り値の型 true。それ以外の場合は false public void handleReturnValue(@Nullable ObjectSE returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws ExceptionSE
ModelAndViewContainer に追加します。HandlerMethodReturnValueHandler の handleReturnValue returnValue - ハンドラーメソッドから返された値 returnType - 戻り値の型。この型は、true を返さなければならない HandlerMethodReturnValueHandler.supportsReturnType(org.springframework.core.MethodParameter) に事前に渡されている必要があります。mavContainer - 現在のリクエストの ModelAndViewContainerwebRequest - 現在のリクエスト ExceptionSE - 戻り値の処理がエラーになる場合