#1431 - Fix evaluation of nested generics in RepresentationModelProcessor.
The code handling CollectionModel types now also checks for the element type being a RepresentationModel instance and checking whether the detected collection element matches the declared type.
This commit is contained in:
@@ -383,7 +383,7 @@ public class RepresentationModelProcessorInvoker {
|
||||
* @param target that target {@link ResolvableType}.
|
||||
* @return
|
||||
*/
|
||||
static boolean isValueTypeMatch(@Nullable CollectionModel<?> collectionModel, ResolvableType target) {
|
||||
boolean isValueTypeMatch(@Nullable CollectionModel<?> collectionModel, ResolvableType target) {
|
||||
|
||||
if (collectionModel == null) {
|
||||
return false;
|
||||
@@ -415,6 +415,8 @@ public class RepresentationModelProcessorInvoker {
|
||||
|
||||
if (element instanceof EntityModel) {
|
||||
return EntityModelProcessorWrapper.isValueTypeMatch((EntityModel<?>) element, resourceType);
|
||||
} else if (element instanceof RepresentationModel) {
|
||||
return resourceType.isInstance(element);
|
||||
} else if (element instanceof EmbeddedWrapper) {
|
||||
return isRawTypeAssignable(resourceType, ((EmbeddedWrapper) element).getRelTargetType());
|
||||
}
|
||||
|
||||
@@ -73,7 +73,6 @@ public class RepresentationModelProcessorInvokerUnitTests {
|
||||
void doesInvokeProcessorForCollectionModelOfRepresentationModel() {
|
||||
|
||||
CollectionModelOfGenericModelProcessor processor = new CollectionModelOfGenericModelProcessor();
|
||||
|
||||
RepresentationModelProcessorInvoker invoker = new RepresentationModelProcessorInvoker(
|
||||
singletonList(processor));
|
||||
|
||||
@@ -114,7 +113,8 @@ public class RepresentationModelProcessorInvokerUnitTests {
|
||||
}
|
||||
|
||||
// 1425
|
||||
static class CollectionModelOfGenericModelProcessor implements RepresentationModelProcessor<CollectionModel<GenericModel<?>>> {
|
||||
static class CollectionModelOfGenericModelProcessor
|
||||
implements RepresentationModelProcessor<CollectionModel<GenericModel<?>>> {
|
||||
|
||||
boolean invoked = false;
|
||||
|
||||
|
||||
@@ -269,8 +269,10 @@ class ResourceProcessorHandlerMethodReturnValueHandlerUnitTest {
|
||||
void resourcesProcessorMatchesValueSubTypes() {
|
||||
|
||||
ResolvableType type = ResolvableType.forClass(PagedStringResources.class);
|
||||
CollectionModelProcessorWrapper wrapper = new CollectionModelProcessorWrapper(
|
||||
mock(RepresentationModelProcessor.class));
|
||||
|
||||
assertThat(CollectionModelProcessorWrapper.isValueTypeMatch(FOO_PAGE, type)).isTrue();
|
||||
assertThat(wrapper.isValueTypeMatch(FOO_PAGE, type)).isTrue();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user