Class PayloadMethodArgumentResolver
java.lang.Object
org.springframework.messaging.handler.annotation.support.PayloadMethodArgumentResolver
- All Implemented Interfaces:
HandlerMethodArgumentResolver
A resolver to extract and convert the payload of a message using a
MessageConverter
. It also validates the payload using a
Validator
if the argument is annotated with a Validation annotation.
This HandlerMethodArgumentResolver
should be ordered last as it
supports all types and does not require the Payload
annotation.
- Since:
- 5.2
- Author:
- Rossen Stoyanchev, Juergen Hoeller, Brian Clozel, Stephane Nicoll
-
Constructor Summary
ConstructorDescriptionPayloadMethodArgumentResolver
(MessageConverter messageConverter) Create a newPayloadArgumentResolver
with the givenMessageConverter
.PayloadMethodArgumentResolver
(MessageConverter messageConverter, org.springframework.validation.Validator validator) PayloadMethodArgumentResolver
(MessageConverter messageConverter, org.springframework.validation.Validator validator, boolean useDefaultResolution) -
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
isEmptyPayload
(Object payload) Specify if the givenpayload
is empty.resolveArgument
(org.springframework.core.MethodParameter parameter, Message<?> message) Resolves a method parameter into an argument value from a given message.protected Class<?>
resolveTargetClass
(org.springframework.core.MethodParameter parameter, Message<?> message) Resolve the target class to convert the payload to.boolean
supportsParameter
(org.springframework.core.MethodParameter parameter) Whether the given method parameter is supported by this resolver.protected void
Validate the payload if applicable.
-
Constructor Details
-
PayloadMethodArgumentResolver
Create a newPayloadArgumentResolver
with the givenMessageConverter
.- Parameters:
messageConverter
- the MessageConverter to use (required)
-
PayloadMethodArgumentResolver
public PayloadMethodArgumentResolver(MessageConverter messageConverter, @Nullable org.springframework.validation.Validator validator) - Parameters:
messageConverter
- the MessageConverter to use (required)validator
- the Validator to use (optional)
-
PayloadMethodArgumentResolver
public PayloadMethodArgumentResolver(MessageConverter messageConverter, @Nullable org.springframework.validation.Validator validator, boolean useDefaultResolution) - Parameters:
messageConverter
- the MessageConverter to use (required)validator
- the Validator to use (optional)useDefaultResolution
- if "true" (the default) this resolver supports all parameters; if "false" then only arguments with the@Payload
annotation are supported.
-
-
Method Details
-
supportsParameter
public boolean supportsParameter(org.springframework.core.MethodParameter parameter) Description copied from interface:HandlerMethodArgumentResolver
Whether the given method parameter is supported by this resolver.- Specified by:
supportsParameter
in interfaceHandlerMethodArgumentResolver
- Parameters:
parameter
- the method parameter to check- Returns:
true
if this resolver supports the supplied parameter;false
otherwise
-
resolveArgument
@Nullable public Object resolveArgument(org.springframework.core.MethodParameter parameter, Message<?> message) throws Exception Description copied from interface:HandlerMethodArgumentResolver
Resolves a method parameter into an argument value from a given message.- Specified by:
resolveArgument
in interfaceHandlerMethodArgumentResolver
- Parameters:
parameter
- the method parameter to resolve. This parameter must have previously been passed toHandlerMethodArgumentResolver.supportsParameter(org.springframework.core.MethodParameter)
which must have returnedtrue
.message
- the currently processed message- Returns:
- the resolved argument value, or
null
- Throws:
Exception
- in case of errors with the preparation of argument values
-
isEmptyPayload
Specify if the givenpayload
is empty.- Parameters:
payload
- the payload to check (can benull
)
-
resolveTargetClass
protected Class<?> resolveTargetClass(org.springframework.core.MethodParameter parameter, Message<?> message) Resolve the target class to convert the payload to.By default this is simply
MethodParameter.getParameterType()
but that can be overridden to select a more specific target type after also taking into account the "Content-Type", e.g. returnString
if target type isObject
and"Content-Type:text/**"
.- Parameters:
parameter
- the target method parametermessage
- the message being processed- Returns:
- the target type to use
- Since:
- 5.2
-
validate
protected void validate(Message<?> message, org.springframework.core.MethodParameter parameter, Object target) Validate the payload if applicable.The default implementation checks for
@jakarta.validation.Valid
, Spring'sValidated
, and custom annotations whose name starts with "Valid".- Parameters:
message
- the currently processed messageparameter
- the method parametertarget
- the target payload object- Throws:
MethodArgumentNotValidException
- in case of binding errors
-