diff --git a/src/main/java/org/springframework/hateoas/server/mvc/RepresentationModelProcessorInvoker.java b/src/main/java/org/springframework/hateoas/server/mvc/RepresentationModelProcessorInvoker.java index f85316b1..ecd7603f 100644 --- a/src/main/java/org/springframework/hateoas/server/mvc/RepresentationModelProcessorInvoker.java +++ b/src/main/java/org/springframework/hateoas/server/mvc/RepresentationModelProcessorInvoker.java @@ -383,7 +383,6 @@ public class RepresentationModelProcessorInvoker { * @param target that target {@link ResolvableType}. * @return */ - static boolean isValueTypeMatch(@Nullable CollectionModel collectionModel, ResolvableType target) { if (collectionModel == null) { diff --git a/src/test/java/org/springframework/hateoas/server/mvc/RepresentationModelProcessorInvokerUnitTests.java b/src/test/java/org/springframework/hateoas/server/mvc/RepresentationModelProcessorInvokerUnitTests.java index ba0a84ac..332e742f 100644 --- a/src/test/java/org/springframework/hateoas/server/mvc/RepresentationModelProcessorInvokerUnitTests.java +++ b/src/test/java/org/springframework/hateoas/server/mvc/RepresentationModelProcessorInvokerUnitTests.java @@ -15,12 +15,12 @@ */ package org.springframework.hateoas.server.mvc; +import static java.util.Collections.*; import static org.assertj.core.api.Assertions.*; -import java.util.Collections; - import org.junit.jupiter.api.Test; import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.RepresentationModel; import org.springframework.hateoas.server.RepresentationModelProcessor; @@ -35,12 +35,25 @@ public class RepresentationModelProcessorInvokerUnitTests { void doesNotInvokeGenericProcessorForCollectionModel() { RepresentationModelProcessorInvoker invoker = new RepresentationModelProcessorInvoker( - Collections.singletonList(new GenericPostProcessor<>())); + singletonList(new GenericPostProcessor<>())); assertThatCode(() -> invoker.invokeProcessorsFor(CollectionModel.empty())) // .doesNotThrowAnyException(); } + @Test // #1379 + void doesNotInvokeProcessorForNonAssignableNestedEntity() { + + FirstEntityProcessor processor = new FirstEntityProcessor(); + RepresentationModelProcessorInvoker invoker = new RepresentationModelProcessorInvoker( + singletonList(processor)); + + EntityModel entityModel = EntityModel.of(new SecondEntity()); + invoker.invokeProcessorsFor(CollectionModel.of(singleton(entityModel))); + + assertThat(processor.invoked).isFalse(); + } + // #1280 static class GenericPostProcessor> implements RepresentationModelProcessor { @@ -52,4 +65,21 @@ public class RepresentationModelProcessorInvokerUnitTests { } static class GenericModel> extends RepresentationModel {} + + static class FirstEntity {} + + static class SecondEntity {}; + + static class FirstEntityProcessor implements RepresentationModelProcessor>> { + + boolean invoked = false; + + @Override + public CollectionModel> process(CollectionModel> model) { + + invoked = true; + + return model; + } + } }