PayloadArgumentResolver has useDefaultResolution flag
Issue: SPR-14937
This commit is contained in:
parent
122334c37a
commit
a203b74d20
|
@ -56,6 +56,8 @@ public class PayloadArgumentResolver implements HandlerMethodArgumentResolver {
|
|||
|
||||
private final Validator validator;
|
||||
|
||||
private final boolean useDefaultResolution;
|
||||
|
||||
|
||||
/**
|
||||
* Create a new {@code PayloadArgumentResolver} with the given
|
||||
|
@ -74,15 +76,31 @@ public class PayloadArgumentResolver implements HandlerMethodArgumentResolver {
|
|||
* @param validator the Validator to use (optional)
|
||||
*/
|
||||
public PayloadArgumentResolver(MessageConverter messageConverter, Validator validator) {
|
||||
this(messageConverter, validator, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new {@code PayloadArgumentResolver} with the given
|
||||
* {@link MessageConverter} and {@link Validator}.
|
||||
* @param messageConverter the MessageConverter to use (required)
|
||||
* @param validator the Validator to use (optional)
|
||||
* @param useDefaultResolution if "true" (the default) this resolver supports
|
||||
* all parameters; if "false" then only arguments with the {@code @Payload}
|
||||
* annotation are supported.
|
||||
*/
|
||||
public PayloadArgumentResolver(MessageConverter messageConverter, Validator validator,
|
||||
boolean useDefaultResolution) {
|
||||
|
||||
Assert.notNull(messageConverter, "MessageConverter must not be null");
|
||||
this.converter = messageConverter;
|
||||
this.validator = validator;
|
||||
this.useDefaultResolution = useDefaultResolution;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean supportsParameter(MethodParameter parameter) {
|
||||
return true;
|
||||
return (parameter.hasParameterAnnotation(Payload.class) || this.useDefaultResolution);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -53,8 +53,6 @@ public class PayloadArgumentResolverTests {
|
|||
|
||||
private PayloadArgumentResolver resolver;
|
||||
|
||||
private Method payloadMethod;
|
||||
|
||||
private MethodParameter paramAnnotated;
|
||||
|
||||
private MethodParameter paramAnnotatedNotRequired;
|
||||
|
@ -76,20 +74,35 @@ public class PayloadArgumentResolverTests {
|
|||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
this.resolver = new PayloadArgumentResolver(new StringMessageConverter(), testValidator());
|
||||
this.payloadMethod = PayloadArgumentResolverTests.class.getDeclaredMethod("handleMessage",
|
||||
String.class, String.class, Locale.class, String.class, String.class, String.class, String.class);
|
||||
|
||||
this.paramAnnotated = new SynthesizingMethodParameter(this.payloadMethod, 0);
|
||||
this.paramAnnotatedNotRequired = new SynthesizingMethodParameter(this.payloadMethod, 1);
|
||||
this.resolver = new PayloadArgumentResolver(new StringMessageConverter(), testValidator());
|
||||
|
||||
Method payloadMethod = PayloadArgumentResolverTests.class.getDeclaredMethod(
|
||||
"handleMessage", String.class, String.class, Locale.class,
|
||||
String.class, String.class, String.class, String.class);
|
||||
|
||||
this.paramAnnotated = new SynthesizingMethodParameter(payloadMethod, 0);
|
||||
this.paramAnnotatedNotRequired = new SynthesizingMethodParameter(payloadMethod, 1);
|
||||
this.paramAnnotatedRequired = new SynthesizingMethodParameter(payloadMethod, 2);
|
||||
this.paramWithSpelExpression = new SynthesizingMethodParameter(payloadMethod, 3);
|
||||
this.paramValidated = new SynthesizingMethodParameter(this.payloadMethod, 4);
|
||||
this.paramValidated = new SynthesizingMethodParameter(payloadMethod, 4);
|
||||
this.paramValidated.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer());
|
||||
this.paramValidatedNotAnnotated = new SynthesizingMethodParameter(this.payloadMethod, 5);
|
||||
this.paramNotAnnotated = new SynthesizingMethodParameter(this.payloadMethod, 6);
|
||||
this.paramValidatedNotAnnotated = new SynthesizingMethodParameter(payloadMethod, 5);
|
||||
this.paramNotAnnotated = new SynthesizingMethodParameter(payloadMethod, 6);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void supportsParameter() throws Exception {
|
||||
|
||||
assertTrue(this.resolver.supportsParameter(this.paramAnnotated));
|
||||
assertTrue(this.resolver.supportsParameter(this.paramNotAnnotated));
|
||||
|
||||
PayloadArgumentResolver strictResolver = new PayloadArgumentResolver(
|
||||
new StringMessageConverter(), testValidator(), false);
|
||||
|
||||
assertTrue(strictResolver.supportsParameter(this.paramAnnotated));
|
||||
assertFalse(strictResolver.supportsParameter(this.paramNotAnnotated));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void resolveRequired() throws Exception {
|
||||
|
|
Loading…
Reference in New Issue