Consistent lookup of parameter-level JsonView annotation

Issue: SPR-13265
master
Juergen Hoeller 9 years ago
parent b7bdd724b2
commit 02d05ed133
  1. 18
      spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java

@ -262,29 +262,27 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter {
* @param conversionHint the conversion hint Object as passed into the * @param conversionHint the conversion hint Object as passed into the
* converter for the current conversion attempt * converter for the current conversion attempt
* @return the serialization view class, or {@code null} if none * @return the serialization view class, or {@code null} if none
* @since 4.2
*/ */
protected Class<?> getSerializationView(Object conversionHint) { protected Class<?> getSerializationView(Object conversionHint) {
if (conversionHint instanceof MethodParameter) { if (conversionHint instanceof MethodParameter) {
MethodParameter methodParam = (MethodParameter) conversionHint; MethodParameter param = (MethodParameter) conversionHint;
JsonView annotation = methodParam.getParameterAnnotation(JsonView.class); JsonView annotation = (param.getParameterIndex() >= 0 ?
if (annotation == null) { param.getParameterAnnotation(JsonView.class) : param.getMethodAnnotation(JsonView.class));
annotation = methodParam.getMethodAnnotation(JsonView.class); if (annotation != null) {
if (annotation == null) {
return null;
}
}
return extractViewClass(annotation, conversionHint); return extractViewClass(annotation, conversionHint);
} }
}
else if (conversionHint instanceof JsonView) { else if (conversionHint instanceof JsonView) {
return extractViewClass((JsonView) conversionHint, conversionHint); return extractViewClass((JsonView) conversionHint, conversionHint);
} }
else if (conversionHint instanceof Class) { else if (conversionHint instanceof Class) {
return (Class) conversionHint; return (Class) conversionHint;
} }
else {
// No JSON view specified...
return null; return null;
} }
}
private Class<?> extractViewClass(JsonView annotation, Object conversionHint) { private Class<?> extractViewClass(JsonView annotation, Object conversionHint) {
Class<?>[] classes = annotation.value(); Class<?>[] classes = annotation.value();

Loading…
Cancel
Save