Compare commits

...
14 Commits
10 changed files with 62 additions and 35 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign</artifactId>
<version>2.2.0.M1</version>
<version>2.2.0.M2</version>
</parent>
<artifactId>spring-cloud-openfeign-docs</artifactId>
<packaging>pom</packaging>
+1
View File
@@ -0,0 +1 @@
spring-cloud-openfeign.adoc
+4 -4
View File
@@ -4,14 +4,14 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-cloud-openfeign</artifactId>
<version>2.2.0.M1</version>
<version>2.2.0.M2</version>
<packaging>pom</packaging>
<name>Spring Cloud OpenFeign</name>
<description>Spring Cloud OpenFeign</description>
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-build</artifactId>
<version>2.2.0.M3</version>
<version>2.2.0.M4</version>
<relativePath/>
</parent>
<scm>
@@ -26,8 +26,8 @@
<properties>
<main.basedir>${basedir}</main.basedir>
<jackson.version>2.7.3</jackson.version>
<spring-cloud-commons.version>2.2.0.M1</spring-cloud-commons.version>
<spring-cloud-netflix.version>2.2.0.M1</spring-cloud-netflix.version>
<spring-cloud-commons.version>2.2.0.M2</spring-cloud-commons.version>
<spring-cloud-netflix.version>2.2.0.M2</spring-cloud-netflix.version>
<!-- Plugin versions -->
<maven-compiler-plugin.version>3.6.1</maven-compiler-plugin.version>
+1 -1
View File
@@ -6,7 +6,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign</artifactId>
<version>2.2.0.M1</version>
<version>2.2.0.M2</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>spring-cloud-openfeign-core</artifactId>
@@ -34,8 +34,8 @@ import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConf
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.hateoas.RepresentationModel;
import org.springframework.hateoas.mediatype.MessageResolver;
import org.springframework.hateoas.mediatype.hal.CurieProvider;
import org.springframework.hateoas.mediatype.hal.DefaultCurieProvider;
import org.springframework.hateoas.mediatype.hal.HalConfiguration;
@@ -44,7 +44,6 @@ import org.springframework.hateoas.server.LinkRelationProvider;
import org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter;
import static org.springframework.hateoas.MediaTypes.HAL_JSON;
import static org.springframework.hateoas.MediaTypes.HAL_JSON_UTF8;
/**
* @author Hector Espert
@@ -63,9 +62,9 @@ public class FeignHalAutoConfiguration {
public TypeConstrainedMappingJackson2HttpMessageConverter halJacksonHttpMessageConverter(
ObjectProvider<ObjectMapper> objectMapper,
ObjectProvider<HalConfiguration> halConfiguration,
ObjectProvider<LinkRelationProvider> relProvider,
ObjectProvider<MessageResolver> messageResolver,
ObjectProvider<CurieProvider> curieProvider,
ObjectProvider<MessageSourceAccessor> linkRelationMessageSource) {
ObjectProvider<LinkRelationProvider> linkRelationProvider) {
ObjectMapper mapper = objectMapper.getIfAvailable(ObjectMapper::new).copy();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
@@ -77,8 +76,8 @@ public class FeignHalAutoConfiguration {
.getIfAvailable(() -> new DefaultCurieProvider(Collections.emptyMap()));
Jackson2HalModule.HalHandlerInstantiator halHandlerInstantiator = new Jackson2HalModule.HalHandlerInstantiator(
relProvider.getObject(), curieProviderInstance,
linkRelationMessageSource.getObject(), configuration);
linkRelationProvider.getIfAvailable(), curieProviderInstance,
messageResolver.getIfAvailable(), configuration);
mapper.setHandlerInstantiator(halHandlerInstantiator);
@@ -89,7 +88,7 @@ public class FeignHalAutoConfiguration {
TypeConstrainedMappingJackson2HttpMessageConverter converter = new TypeConstrainedMappingJackson2HttpMessageConverter(
RepresentationModel.class);
converter.setSupportedMediaTypes(Arrays.asList(HAL_JSON, HAL_JSON_UTF8));
converter.setSupportedMediaTypes(Arrays.asList(HAL_JSON));
converter.setObjectMapper(mapper);
return converter;
}
@@ -81,8 +81,12 @@ public class PageableSpringEncoder implements Encoder {
if (supports(object)) {
if (object instanceof Pageable) {
Pageable pageable = (Pageable) object;
template.query(pageParameter, pageable.getPageNumber() + "");
template.query(sizeParameter, pageable.getPageSize() + "");
if (pageable.isPaged()) {
template.query(pageParameter, pageable.getPageNumber() + "");
template.query(sizeParameter, pageable.getPageSize() + "");
}
if (pageable.getSort() != null) {
applySort(template, pageable.getSort());
}
@@ -26,7 +26,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.hateoas.mediatype.MessageResolver;
import org.springframework.hateoas.mediatype.hal.CurieProvider;
import org.springframework.hateoas.mediatype.hal.HalConfiguration;
import org.springframework.hateoas.mediatype.hal.Jackson2HalModule;
@@ -38,7 +38,6 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.springframework.hateoas.MediaTypes.HAL_JSON;
import static org.springframework.hateoas.MediaTypes.HAL_JSON_UTF8;
/**
* @author Hector Espert
@@ -59,7 +58,7 @@ public class FeignHalAutoConfigurationTests {
private ObjectProvider<CurieProvider> curieProvider;
@Mock
private ObjectProvider<MessageSourceAccessor> linkRelationMessageSource;
private ObjectProvider<MessageResolver> messageResolver;
@InjectMocks
private FeignHalAutoConfiguration feignHalAutoConfiguration;
@@ -71,19 +70,17 @@ public class FeignHalAutoConfigurationTests {
when(halConfiguration.getIfAvailable(any()))
.thenReturn(mock(HalConfiguration.class));
when(relProvider.getObject()).thenReturn(mock(LinkRelationProvider.class));
when(relProvider.getIfAvailable()).thenReturn(mock(LinkRelationProvider.class));
when(curieProvider.getIfAvailable(any())).thenReturn(mock(CurieProvider.class));
when(linkRelationMessageSource.getObject())
.thenReturn(mock(MessageSourceAccessor.class));
when(messageResolver.getIfAvailable()).thenReturn(mock(MessageResolver.class));
TypeConstrainedMappingJackson2HttpMessageConverter converter = feignHalAutoConfiguration
.halJacksonHttpMessageConverter(objectMapper, halConfiguration,
relProvider, curieProvider, linkRelationMessageSource);
messageResolver, curieProvider, relProvider);
assertThat(converter).isNotNull();
assertThat(converter.getObjectMapper()).isNotNull();
assertThat(converter.getSupportedMediaTypes())
.isEqualTo(Arrays.asList(HAL_JSON, HAL_JSON_UTF8));
assertThat(converter.getSupportedMediaTypes()).isEqualTo(Arrays.asList(HAL_JSON));
assertThat(Jackson2HalModule.isAlreadyRegisteredIn(converter.getObjectMapper()))
.isTrue();
@@ -64,13 +64,18 @@ public class PageableEncoderTests {
encoder.encode(createPageAndSortRequest(), null, request);
// Request queries shall contain three entries
assertThat(request.queries().size()).isEqualTo(3);
assertThat(request.queries()).hasSize(3);
// Request page shall contain page
assertThat(request.queries().get("page")).contains(String.valueOf(PAGE));
// Request size shall contain size
assertThat(request.queries().get("size")).contains(String.valueOf(SIZE));
// Request sort size shall contain sort entries
assertThat(request.queries().get("sort").size()).isEqualTo(2);
assertThat(request.queries().get("size")).contains(String.valueOf(SIZE)); // Request
// sort
// size
// shall
// contain
// sort
// entries
assertThat(request.queries().get("sort")).hasSize(2);
}
private Pageable createPageAndSortRequest() {
@@ -87,9 +92,14 @@ public class PageableEncoderTests {
// Request page shall contain page
assertThat(request.queries().get("page")).contains(String.valueOf(PAGE));
// Request size shall contain size
assertThat(request.queries().get("size")).contains(String.valueOf(SIZE));
// Request sort size shall contain sort entries
assertThat(request.queries().containsKey("sort")).isEqualTo(false);
assertThat(request.queries().get("size")).contains(String.valueOf(SIZE)); // Request
// sort
// size
// shall
// contain
// sort
// entries
assertThat(request.queries()).doesNotContainKey("sort");
}
private Pageable createPageAndRequest() {
@@ -106,11 +116,22 @@ public class PageableEncoderTests {
// Request queries shall contain three entries
assertThat(request.queries().size()).isEqualTo(1);
// Request sort size shall contain sort entries
assertThat(request.queries().get("sort").size()).isEqualTo(2);
assertThat(request.queries().get("sort")).hasSize(2);
}
private Sort createSort() {
return Sort.by(SORT_1, SORT_2).ascending();
}
@Test
public void testUnpagedRequest() {
Encoder encoder = this.context.getInstance("foo", Encoder.class);
assertThat(encoder).isNotNull();
RequestTemplate request = new RequestTemplate();
encoder.encode(Pageable.unpaged(), null, request);
// Request queries shall contain three entries
assertThat(request.queries()).isEmpty();
}
}
+7 -2
View File
@@ -6,11 +6,11 @@
<parent>
<artifactId>spring-cloud-dependencies-parent</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.2.0.M3</version>
<version>2.2.0.M4</version>
<relativePath/>
</parent>
<artifactId>spring-cloud-openfeign-dependencies</artifactId>
<version>2.2.0.M1</version>
<version>2.2.0.M2</version>
<packaging>pom</packaging>
<name>spring-cloud-openfeign-dependencies</name>
<description>Spring Cloud OpenFeign Dependencies</description>
@@ -100,6 +100,11 @@
<artifactId>feign-sax</artifactId>
<version>${feign.version}</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-mock</artifactId>
<version>${feign.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<profiles>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign</artifactId>
<version>2.2.0.M1</version>
<version>2.2.0.M2</version>
<relativePath>..</relativePath>
</parent>
<artifactId>spring-cloud-starter-openfeign</artifactId>