|
18 | 18 |
|
19 | 19 | import java.lang.reflect.AnnotatedElement; |
20 | 20 | import java.lang.reflect.Method; |
| 21 | +import java.lang.reflect.ParameterizedType; |
| 22 | +import java.lang.reflect.Type; |
21 | 23 | import java.nio.charset.Charset; |
22 | 24 | import java.nio.charset.StandardCharsets; |
23 | 25 | import java.util.ArrayList; |
@@ -1054,7 +1056,8 @@ public Object resolveArgument(MethodParameter parameter, Message<?> message) thr |
1054 | 1056 | resolved = super.resolveArgument(parameter, message); |
1055 | 1057 | } |
1056 | 1058 | catch (MethodArgumentNotValidException ex) { |
1057 | | - if (message.getPayload().equals(Optional.empty())) { |
| 1059 | + Type type = parameter.getGenericParameterType(); |
| 1060 | + if (isOptional(message, type)) { |
1058 | 1061 | BindingResult bindingResult = ex.getBindingResult(); |
1059 | 1062 | if (bindingResult != null) { |
1060 | 1063 | List<ObjectError> allErrors = bindingResult.getAllErrors(); |
@@ -1082,6 +1085,12 @@ public Object resolveArgument(MethodParameter parameter, Message<?> message) thr |
1082 | 1085 | return resolved; |
1083 | 1086 | } |
1084 | 1087 |
|
| 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 | + |
1085 | 1094 | @Override |
1086 | 1095 | protected boolean isEmptyPayload(Object payload) { |
1087 | 1096 | return payload == null || payload.equals(Optional.empty()); |
|
0 commit comments