Skip to content

Commit 3f303df

Browse files
committed
Support size = 0 in PageJacksonModule
1 parent f7e4281 commit 3f303df

File tree

2 files changed

+72
-10
lines changed

2 files changed

+72
-10
lines changed

spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/PageJacksonModule.java

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
*
3939
* @author Pascal Büttiker
4040
* @author Olga Maciaszek-Sharma
41+
* @author Pedro Mendes
42+
* @author Nikita Konev
4143
*/
4244
public class PageJacksonModule extends Module {
4345

@@ -69,18 +71,22 @@ static class SimplePageImpl<T> implements Page<T> {
6971
@JsonProperty("size") int size, @JsonProperty("totalElements") @JsonAlias({ "total-elements",
7072
"total_elements", "totalelements", "TotalElements" }) long totalElements,
7173
@JsonProperty("sort") Sort sort) {
72-
PageRequest pageRequest;
73-
if (sort != null) {
74-
pageRequest = PageRequest.of(number, size, sort);
74+
if (size > 0) {
75+
PageRequest pageRequest;
76+
if (sort != null) {
77+
pageRequest = PageRequest.of(number, size, sort);
78+
}
79+
else {
80+
pageRequest = PageRequest.of(number, size);
81+
}
82+
delegate = new PageImpl<>(content, pageRequest, totalElements);
7583
}
7684
else {
77-
pageRequest = PageRequest.of(number, size);
85+
delegate = new PageImpl<>(content);
7886
}
79-
delegate = new PageImpl<>(content, pageRequest, totalElements);
80-
8187
}
8288

83-
@JsonProperty
89+
@JsonIgnore
8490
@Override
8591
public int getTotalPages() {
8692
return delegate.getTotalPages();
@@ -104,7 +110,7 @@ public int getSize() {
104110
return delegate.getSize();
105111
}
106112

107-
@JsonProperty
113+
@JsonIgnore
108114
@Override
109115
public int getNumberOfElements() {
110116
return delegate.getNumberOfElements();
@@ -128,13 +134,13 @@ public Sort getSort() {
128134
return delegate.getSort();
129135
}
130136

131-
@JsonProperty
137+
@JsonIgnore
132138
@Override
133139
public boolean isFirst() {
134140
return delegate.isFirst();
135141
}
136142

137-
@JsonProperty
143+
@JsonIgnore
138144
@Override
139145
public boolean isLast() {
140146
return delegate.isLast();
@@ -176,6 +182,18 @@ public Iterator<T> iterator() {
176182
return delegate.iterator();
177183
}
178184

185+
@JsonIgnore
186+
@Override
187+
public Pageable getPageable() {
188+
return delegate.getPageable();
189+
}
190+
191+
@JsonIgnore
192+
@Override
193+
public boolean isEmpty() {
194+
return delegate.isEmpty();
195+
}
196+
179197
}
180198

181199
}

spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/PageJacksonModuleTests.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@
1616

1717
package org.springframework.cloud.openfeign.support;
1818

19+
import java.util.ArrayList;
20+
1921
import com.fasterxml.jackson.core.JsonProcessingException;
2022
import com.fasterxml.jackson.databind.ObjectMapper;
2123
import org.junit.jupiter.api.BeforeAll;
24+
import org.junit.jupiter.api.Test;
2225
import org.junit.jupiter.params.ParameterizedTest;
2326
import org.junit.jupiter.params.provider.ValueSource;
2427

2528
import org.springframework.data.domain.Page;
29+
import org.springframework.data.domain.PageImpl;
30+
import org.springframework.data.domain.Pageable;
2631

2732
import static org.assertj.core.api.Assertions.assertThat;
2833

@@ -31,6 +36,8 @@
3136
*
3237
* @author Ruben Vervaeke
3338
* @author Olga Maciaszek-Sharma
39+
* @author Pedro Mendes
40+
* @author Nikita Konev
3441
*/
3542
public class PageJacksonModuleTests {
3643

@@ -40,6 +47,7 @@ public class PageJacksonModuleTests {
4047
public static void initialize() {
4148
objectMapper = new ObjectMapper();
4249
objectMapper.registerModule(new PageJacksonModule());
50+
objectMapper.registerModule(new SortJacksonModule());
4351
}
4452

4553
@ParameterizedTest
@@ -58,4 +66,40 @@ public void deserializePage(String totalElements) throws JsonProcessingException
5866
assertThat(result.getPageable().getPageNumber()).isEqualTo(1);
5967
}
6068

69+
@Test
70+
public void serializeAndDeserializeEmpty() throws JsonProcessingException {
71+
// Given
72+
PageImpl<Object> objects = new PageImpl<>(new ArrayList<>());
73+
String pageJson = objectMapper.writeValueAsString(objects);
74+
// When
75+
Page<?> result = objectMapper.readValue(pageJson, Page.class);
76+
// Then
77+
assertThat(result).isNotNull();
78+
assertThat(result.getTotalElements()).isEqualTo(0);
79+
assertThat(result.getContent()).hasSize(0);
80+
}
81+
82+
@Test
83+
public void serializeAndDeserializeFilledMultiple() throws JsonProcessingException {
84+
// Given
85+
ArrayList<Object> strings0 = new ArrayList<>();
86+
strings0.add("first element");
87+
strings0.add("second element");
88+
PageImpl<Object> objects = new PageImpl<>(strings0, Pageable.ofSize(2), 100);
89+
assertThat(objects.getContent()).hasSize(2);
90+
assertThat(objects.getPageable().getPageSize()).isEqualTo(2);
91+
92+
String pageJson = objectMapper.writeValueAsString(objects);
93+
// When
94+
Page<?> result = objectMapper.readValue(pageJson, Page.class);
95+
// Then
96+
assertThat(result).isNotNull();
97+
assertThat(result.getTotalElements()).isEqualTo(100);
98+
assertThat(result.getContent()).hasSize(2);
99+
assertThat(result.getContent().get(0)).isEqualTo("first element");
100+
assertThat(result.getContent().get(1)).isEqualTo("second element");
101+
assertThat(result.getPageable().getPageSize()).isEqualTo(2);
102+
assertThat(result.getPageable().getPageNumber()).isEqualTo(0);
103+
}
104+
61105
}

0 commit comments

Comments
 (0)