diff --git a/src/main/java/org/springframework/data/web/JsonProjectingMethodInterceptorFactory.java b/src/main/java/org/springframework/data/web/JsonProjectingMethodInterceptorFactory.java index c718a933a..e218d71ac 100644 --- a/src/main/java/org/springframework/data/web/JsonProjectingMethodInterceptorFactory.java +++ b/src/main/java/org/springframework/data/web/JsonProjectingMethodInterceptorFactory.java @@ -29,6 +29,7 @@ import java.util.Map; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; + import org.springframework.core.ResolvableType; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.data.projection.Accessor; @@ -45,8 +46,8 @@ import com.jayway.jsonpath.Option; import com.jayway.jsonpath.ParseContext; import com.jayway.jsonpath.PathNotFoundException; import com.jayway.jsonpath.TypeRef; -import com.jayway.jsonpath.spi.mapper.MappingProvider; import com.jayway.jsonpath.spi.json.JsonProvider; +import com.jayway.jsonpath.spi.mapper.MappingProvider; /** * {@link MethodInterceptorFactory} to create a {@link MethodInterceptor} that will @@ -61,34 +62,38 @@ public class JsonProjectingMethodInterceptorFactory implements MethodInterceptor private final ParseContext context; - /** - * Creates a new {@link JsonProjectingMethodInterceptorFactory} using the given {@link MappingProvider} and {@link JsonProvider}. - * - * @param mappingProvider must not be {@literal null}. - * @param jsonProvider must not be {@literal null}. - */ - public JsonProjectingMethodInterceptorFactory(MappingProvider mappingProvider, JsonProvider jsonProvider) { - - Assert.notNull(mappingProvider, "MappingProvider must not be null!"); - Assert.notNull(jsonProvider, "JsonProvider must not be null!"); - - Configuration configuration = Configuration.builder()// - .options(Option.ALWAYS_RETURN_LIST)// - .mappingProvider(mappingProvider)// - .jsonProvider(jsonProvider)// - .build(); - - this.context = JsonPath.using(configuration); - } - /** - * Creates a new {@link JsonProjectingMethodInterceptorFactory} using the given {@link MappingProvider}. + * Creates a new {@link JsonProjectingMethodInterceptorFactory} using the default {@link JsonProvider} and the given + * {@link MappingProvider}. * * @param mappingProvider must not be {@literal null}. + * @see Configuration#defaultConfiguration() + * @see Configuration#jsonProvider() */ - @Deprecated public JsonProjectingMethodInterceptorFactory(MappingProvider mappingProvider) { - this(mappingProvider, Configuration.defaultConfiguration().jsonProvider()); + this(Configuration.defaultConfiguration().jsonProvider(), mappingProvider); + } + + /** + * Creates a new {@link JsonProjectingMethodInterceptorFactory} using the given {@link JsonProvider} and + * {@link MappingProvider}. + * + * @param jsonProvider must not be {@literal null}. + * @param mappingProvider must not be {@literal null}. + * @since 2.5.3 + */ + public JsonProjectingMethodInterceptorFactory(JsonProvider jsonProvider, MappingProvider mappingProvider) { + + Assert.notNull(jsonProvider, "JsonProvider must not be null!"); + Assert.notNull(mappingProvider, "MappingProvider must not be null!"); + + Configuration configuration = Configuration.builder()// + .options(Option.ALWAYS_RETURN_LIST) // + .jsonProvider(jsonProvider) // + .mappingProvider(mappingProvider) // + .build(); + + this.context = JsonPath.using(configuration); } /* diff --git a/src/main/java/org/springframework/data/web/ProjectingJackson2HttpMessageConverter.java b/src/main/java/org/springframework/data/web/ProjectingJackson2HttpMessageConverter.java index 751158d73..b1e2b9f6b 100644 --- a/src/main/java/org/springframework/data/web/ProjectingJackson2HttpMessageConverter.java +++ b/src/main/java/org/springframework/data/web/ProjectingJackson2HttpMessageConverter.java @@ -19,7 +19,6 @@ import java.io.IOException; import java.lang.reflect.Type; import java.util.Map; -import com.jayway.jsonpath.spi.json.JacksonJsonProvider; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.BeanFactory; @@ -37,6 +36,7 @@ import org.springframework.util.Assert; import org.springframework.util.ConcurrentReferenceHashMap; import com.fasterxml.jackson.databind.ObjectMapper; +import com.jayway.jsonpath.spi.json.JacksonJsonProvider; import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider; /** @@ -85,8 +85,8 @@ public class ProjectingJackson2HttpMessageConverter extends MappingJackson2HttpM Assert.notNull(mapper, "ObjectMapper must not be null!"); SpelAwareProxyProjectionFactory projectionFactory = new SpelAwareProxyProjectionFactory(); - projectionFactory - .registerMethodInvokerFactory(new JsonProjectingMethodInterceptorFactory(new JacksonMappingProvider(mapper), new JacksonJsonProvider(mapper))); + projectionFactory.registerMethodInvokerFactory(new JsonProjectingMethodInterceptorFactory( + new JacksonJsonProvider(mapper), new JacksonMappingProvider(mapper))); return projectionFactory; } diff --git a/src/test/java/org/springframework/data/web/JsonProjectingMethodInterceptorFactoryUnitTests.java b/src/test/java/org/springframework/data/web/JsonProjectingMethodInterceptorFactoryUnitTests.java index f640ed467..c8b628cd2 100755 --- a/src/test/java/org/springframework/data/web/JsonProjectingMethodInterceptorFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/web/JsonProjectingMethodInterceptorFactoryUnitTests.java @@ -17,8 +17,6 @@ package org.springframework.data.web; import static org.assertj.core.api.Assertions.*; -import com.jayway.jsonpath.spi.json.JacksonJsonProvider; -import com.jayway.jsonpath.spi.json.JsonProvider; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -30,10 +28,13 @@ import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; + import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.projection.SpelAwareProxyProjectionFactory; import com.fasterxml.jackson.databind.ObjectMapper; +import com.jayway.jsonpath.spi.json.JacksonJsonProvider; +import com.jayway.jsonpath.spi.json.JsonProvider; import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider; import com.jayway.jsonpath.spi.mapper.MappingProvider; @@ -60,9 +61,11 @@ class JsonProjectingMethodInterceptorFactoryUnitTests { SpelAwareProxyProjectionFactory projectionFactory = new SpelAwareProxyProjectionFactory(); - MappingProvider mappingProvider = new JacksonMappingProvider(new ObjectMapper()); - JsonProvider jsonProvider = new JacksonJsonProvider(new ObjectMapper()); - projectionFactory.registerMethodInvokerFactory(new JsonProjectingMethodInterceptorFactory(mappingProvider, jsonProvider)); + ObjectMapper objectMapper = new ObjectMapper(); + MappingProvider mappingProvider = new JacksonMappingProvider(objectMapper); + JsonProvider jsonProvider = new JacksonJsonProvider(objectMapper); + projectionFactory + .registerMethodInvokerFactory(new JsonProjectingMethodInterceptorFactory(jsonProvider, mappingProvider)); this.projectionFactory = projectionFactory; this.customer = projectionFactory.createProjection(Customer.class, new ByteArrayInputStream(json.getBytes()));