Skip to content

Commit f2e1e98

Browse files
committed
GH-1491: Fix Fallback When Parameter is Optional
Only pass `Optional.empty()` if the method parameter is `Optional`.
1 parent c67f80b commit f2e1e98

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/annotation/RabbitListenerAnnotationBeanPostProcessor.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import java.lang.reflect.AnnotatedElement;
2020
import java.lang.reflect.Method;
21+
import java.lang.reflect.ParameterizedType;
22+
import java.lang.reflect.Type;
2123
import java.nio.charset.Charset;
2224
import java.nio.charset.StandardCharsets;
2325
import java.util.ArrayList;
@@ -1054,7 +1056,8 @@ public Object resolveArgument(MethodParameter parameter, Message<?> message) thr
10541056
resolved = super.resolveArgument(parameter, message);
10551057
}
10561058
catch (MethodArgumentNotValidException ex) {
1057-
if (message.getPayload().equals(Optional.empty())) {
1059+
Type type = parameter.getGenericParameterType();
1060+
if (isOptional(message, type)) {
10581061
BindingResult bindingResult = ex.getBindingResult();
10591062
if (bindingResult != null) {
10601063
List<ObjectError> allErrors = bindingResult.getAllErrors();
@@ -1082,6 +1085,12 @@ public Object resolveArgument(MethodParameter parameter, Message<?> message) thr
10821085
return resolved;
10831086
}
10841087

1088+
private boolean isOptional(Message<?> message, Type type) {
1089+
return (Optional.class.equals(type) || (type instanceof ParameterizedType
1090+
&& Optional.class.equals(((ParameterizedType) type).getRawType())))
1091+
&& message.getPayload().equals(Optional.empty());
1092+
}
1093+
10851094
@Override
10861095
protected boolean isEmptyPayload(Object payload) {
10871096
return payload == null || payload.equals(Optional.empty());

0 commit comments

Comments
 (0)