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, waitSE
protected 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
ExceptionSE
protected 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
- 戻り値の処理がエラーになる場合