fix cascading deserialization Spring Data's Page by setting @JsonIgnoreProperties(ignoreUnknown = true), revert ignoring getTotalPages(), getNumberOfElements(), isFirst(), isLast() (#653)
This commit is contained in:
committed by
Olga Maciaszek-Sharma
parent
7e01355317
commit
8fdb488697
@@ -22,6 +22,7 @@ import java.util.function.Function;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonAlias;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.core.Version;
|
||||
import com.fasterxml.jackson.databind.Module;
|
||||
@@ -59,6 +60,7 @@ public class PageJacksonModule extends Module {
|
||||
}
|
||||
|
||||
@JsonDeserialize(as = SimplePageImpl.class)
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
private interface PageMixIn {
|
||||
|
||||
}
|
||||
@@ -86,7 +88,7 @@ public class PageJacksonModule extends Module {
|
||||
}
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
@JsonProperty
|
||||
@Override
|
||||
public int getTotalPages() {
|
||||
return delegate.getTotalPages();
|
||||
@@ -110,7 +112,7 @@ public class PageJacksonModule extends Module {
|
||||
return delegate.getSize();
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
@JsonProperty
|
||||
@Override
|
||||
public int getNumberOfElements() {
|
||||
return delegate.getNumberOfElements();
|
||||
@@ -134,13 +136,13 @@ public class PageJacksonModule extends Module {
|
||||
return delegate.getSort();
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
@JsonProperty
|
||||
@Override
|
||||
public boolean isFirst() {
|
||||
return delegate.isFirst();
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
@JsonProperty
|
||||
@Override
|
||||
public boolean isLast() {
|
||||
return delegate.isLast();
|
||||
|
||||
@@ -82,10 +82,10 @@ public class PageJacksonModuleTests {
|
||||
@Test
|
||||
public void serializeAndDeserializeFilledMultiple() throws JsonProcessingException {
|
||||
// Given
|
||||
ArrayList<Object> strings0 = new ArrayList<>();
|
||||
strings0.add("first element");
|
||||
strings0.add("second element");
|
||||
PageImpl<Object> objects = new PageImpl<>(strings0, PageRequest.of(6, 2), 100);
|
||||
ArrayList<Object> pageElements = new ArrayList<>();
|
||||
pageElements.add("first element");
|
||||
pageElements.add("second element");
|
||||
PageImpl<Object> objects = new PageImpl<>(pageElements, PageRequest.of(6, 2), 100);
|
||||
assertThat(objects.getContent()).hasSize(2);
|
||||
assertThat(objects.getPageable().getPageSize()).isEqualTo(2);
|
||||
|
||||
@@ -102,4 +102,57 @@ public class PageJacksonModuleTests {
|
||||
assertThat(result.getPageable().getPageNumber()).isEqualTo(6);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void serializeAndDeserializeEmptyCascade() throws JsonProcessingException {
|
||||
// Given
|
||||
PageImpl<Object> objects = new PageImpl<>(new ArrayList<>());
|
||||
String pageJson = objectMapper.writeValueAsString(objects);
|
||||
// When
|
||||
Page<?> result = objectMapper.readValue(pageJson, Page.class);
|
||||
// Then
|
||||
assertThat(result).isNotNull();
|
||||
assertThat(result.getTotalElements()).isEqualTo(0);
|
||||
assertThat(result.getContent()).hasSize(0);
|
||||
|
||||
String cascadedPageJson = objectMapper.writeValueAsString(result);
|
||||
Page<?> cascadedResult = objectMapper.readValue(cascadedPageJson, Page.class);
|
||||
assertThat(cascadedResult).isNotNull();
|
||||
assertThat(cascadedResult.getTotalElements()).isEqualTo(0);
|
||||
assertThat(cascadedResult.getContent()).hasSize(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void serializeAndDeserializeFilledMultipleCascade() throws JsonProcessingException {
|
||||
// Given
|
||||
ArrayList<Object> pageElements = new ArrayList<>();
|
||||
pageElements.add("first element in cascaded serialization");
|
||||
pageElements.add("second element in cascaded serialization");
|
||||
PageImpl<Object> objects = new PageImpl<>(pageElements, PageRequest.of(6, 2), 100);
|
||||
assertThat(objects.getContent()).hasSize(2);
|
||||
assertThat(objects.getPageable().getPageSize()).isEqualTo(2);
|
||||
|
||||
String pageJson = objectMapper.writeValueAsString(objects);
|
||||
// When
|
||||
Page<?> result = objectMapper.readValue(pageJson, Page.class);
|
||||
// Then
|
||||
assertThat(result).isNotNull();
|
||||
assertThat(result.getTotalElements()).isEqualTo(100);
|
||||
assertThat(result.getContent()).hasSize(2);
|
||||
assertThat(result.getContent().get(0)).isEqualTo("first element in cascaded serialization");
|
||||
assertThat(result.getContent().get(1)).isEqualTo("second element in cascaded serialization");
|
||||
assertThat(result.getPageable().getPageSize()).isEqualTo(2);
|
||||
assertThat(result.getPageable().getPageNumber()).isEqualTo(6);
|
||||
|
||||
String cascadedPageJson = objectMapper.writeValueAsString(result);
|
||||
Page<?> cascadedResult = objectMapper.readValue(cascadedPageJson, Page.class);
|
||||
// Then
|
||||
assertThat(cascadedResult).isNotNull();
|
||||
assertThat(cascadedResult.getTotalElements()).isEqualTo(100);
|
||||
assertThat(cascadedResult.getContent()).hasSize(2);
|
||||
assertThat(cascadedResult.getContent().get(0)).isEqualTo("first element in cascaded serialization");
|
||||
assertThat(cascadedResult.getContent().get(1)).isEqualTo("second element in cascaded serialization");
|
||||
assertThat(cascadedResult.getPageable().getPageSize()).isEqualTo(2);
|
||||
assertThat(cascadedResult.getPageable().getPageNumber()).isEqualTo(6);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user