diff --git a/spring-web/src/main/java/org/springframework/web/method/HandlerMethod.java b/spring-web/src/main/java/org/springframework/web/method/HandlerMethod.java index 3a001fb07f..d1613211b0 100644 --- a/spring-web/src/main/java/org/springframework/web/method/HandlerMethod.java +++ b/spring-web/src/main/java/org/springframework/web/method/HandlerMethod.java @@ -480,26 +480,28 @@ public class HandlerMethod { Annotation[] anns = this.combinedAnnotations; if (anns == null) { anns = super.getParameterAnnotations(); - for (Annotation[][] ifcAnns : getInterfaceParameterAnnotations()) { - int index = getParameterIndex(); - if (index < ifcAnns.length) { - Annotation[] paramAnns = ifcAnns[index]; - if (paramAnns.length > 0) { - List merged = new ArrayList<>(anns.length + paramAnns.length); - merged.addAll(Arrays.asList(anns)); - for (Annotation paramAnn : paramAnns) { - boolean existingType = false; - for (Annotation ann : anns) { - if (ann.annotationType() == paramAnn.annotationType()) { - existingType = true; - break; + int index = getParameterIndex(); + if (index >= 0) { + for (Annotation[][] ifcAnns : getInterfaceParameterAnnotations()) { + if (index < ifcAnns.length) { + Annotation[] paramAnns = ifcAnns[index]; + if (paramAnns.length > 0) { + List merged = new ArrayList<>(anns.length + paramAnns.length); + merged.addAll(Arrays.asList(anns)); + for (Annotation paramAnn : paramAnns) { + boolean existingType = false; + for (Annotation ann : anns) { + if (ann.annotationType() == paramAnn.annotationType()) { + existingType = true; + break; + } + } + if (!existingType) { + merged.add(adaptAnnotation(paramAnn)); } } - if (!existingType) { - merged.add(adaptAnnotation(paramAnn)); - } + anns = merged.toArray(new Annotation[0]); } - anns = merged.toArray(new Annotation[0]); } } }