I need to put my spring data Page object inside redis via redisson client.
So, for this case i have special mapper dto:
public class RestResponsePage<T> extends PageImpl<T> {
private static final long serialVersionUID = 3248189030448292002L;
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public RestResponsePage(@JsonProperty("content") List<T> content,
@JsonProperty("number") int number,
@JsonProperty("size") int size,
@JsonProperty("totalElements") Long totalElements,
@JsonProperty("last") boolean last,
@JsonProperty("totalPages") int totalPages,
@JsonProperty("first") boolean first,
@JsonProperty("numberOfElements") int numberOfElements) {
super(content, PageRequest.of(number, size), totalElements);
}
public RestResponsePage(List<T> content, Pageable pageable, long total) {
super(content, pageable, total);
}
public RestResponsePage(List<T> content) {
super(content);
}
public RestResponsePage() {
super(new ArrayList<T>());
}
}
Content list have special type of my DTO.
And in my service i use next code:
// Converts from Page<T> to RestResponsePage<T>
var responsePage = mapper.mapToRestResponsePage(response);
But when i'am trying to read data from redis
JsonJacksonCodec codec = new TypedJsonJacksonCodec(RestResponsePage.class, mapper);
redissonClient.getBucket("bucket-data", codec).set(response);
I will face this error:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.data.domain.Pageable` (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
at [Source: (io.netty.buffer.ByteBufInputStream); line: 1, column: 2522] (through reference chain: com.mesh.iqretail.entity.dto.request.page.RestResponsePage["pageable"])
Inside redis i have next data:
"{\"content\":[{\"clientName\":\"a6a7ca015a8e8ca220ea05d4b38f88e3\",\"id\":1,\"inn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"kpp\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"ogrn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"urAdr\":\"cf6d22b802c15915a4cbcd60042db9a3\"},{\"clientName\":\"5dceaf0586dad83c642cfcec22cd0fcf\",\"clientSapId\":200011315,\"id\":2,\"inn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"kpp\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"ogrn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"urAdr\":\"cf6d22b802c15915a4cbcd60042db9a3\"},{\"clientName\":\"c33f576f6d2267c715c166d8b1b43997\",\"clientSapId\":200015619,\"id\":3,\"inn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"kpp\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"ogrn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"urAdr\":\"cf6d22b802c15915a4cbcd60042db9a3\"},{\"clientName\":\"2266631e21ee80d150c933c2c56f5baf\",\"clientSapId\":200093034,\"id\":4,\"inn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"kpp\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"ogrn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"urAdr\":\"cf6d22b802c15915a4cbcd60042db9a3\"},{\"clientName\":\"1fd5973c4fe0e0ec66c87e0d51309c77\",\"clientSapId\":200106398,\"id\":5,\"inn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"kpp\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"ogrn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"urAdr\":\"cf6d22b802c15915a4cbcd60042db9a3\"},{\"clientName\":\"b1d953cfa4f022c5e611b30fb0848527\",\"clientSapId\":200110612,\"id\":6,\"inn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"kpp\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"ogrn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"urAdr\":\"cf6d22b802c15915a4cbcd60042db9a3\"},{\"clientName\":\"07af73ef4b2df61985a3ab7c980d1251\",\"clientSapId\":200121577,\"id\":7,\"inn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"kpp\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"ogrn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"urAdr\":\"cf6d22b802c15915a4cbcd60042db9a3\"},{\"clientName\":\"b2de6e4041569075851f440ae2326897\",\"clientSapId\":200168229,\"id\":8,\"inn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"kpp\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"ogrn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"urAdr\":\"cf6d22b802c15915a4cbcd60042db9a3\"},{\"clientName\":\"293bb618fc2e94504a0d713fe142586c\",\"clientSapId\":300010223,\"id\":9,\"inn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"kpp\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"ogrn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"urAdr\":\"cf6d22b802c15915a4cbcd60042db9a3\"},{\"clientName\":\"b110f2dcbba666896233dff7c04f56d1\",\"clientSapId\":300021981,\"id\":10,\"inn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"kpp\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"ogrn\":\"cf6d22b802c15915a4cbcd60042db9a3\",\"urAdr\":\"cf6d22b802c15915a4cbcd60042db9a3\"}],\"first\":true,\"last\":false,\"empty\":false,\"pageable\":{\"page\":0,\"paged\":true,\"size\":10,\"sort\":{\"empty\":true,\"orders\":[],\"sorted\":false,\"unsorted\":true},\"unpaged\":false},\"total\":1460}"
How can i fix it? I need to serialize content
of page somehow?