|
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