new TypeReference<Page<StoryResponse>>() {}
Das Problem mit dieser Aussage ist, dass Jackson nicht eine abstrakte Art instanziiert. Sie sollten Jackson die Informationen geben, wie Sie Page
mit einem konkreten Typ instanziieren können. Aber seine konkreten Typ, PageImpl
, hat keinen Default-Konstruktor oder irgendwelche @JsonCreator
s was das betrifft, so können Sie nicht den folgenden Code entweder:
new TypeReference<PageImpl<StoryResponse>>() {}
Da Sie nicht die erforderlichen Informationen, um die Page
hinzufügen Klasse, Es ist besser, eine benutzerdefinierte Implementierung für Page
Schnittstelle zu erstellen, die einen Standardarrag-Konstruktor wie in diesem answer hat. Verwenden Sie dann die benutzerdefinierte Implementierung in Art Referenz, wie folgt vor:
new TypeReference<CustomPageImpl<StoryResponse>>() {}
Hier wird die benutzerdefinierte Implementierung sind, aus verknüpften Frage kopiert:
public class CustomPageImpl<T> extends PageImpl<T> {
private static final long serialVersionUID = 1L;
private int number;
private int size;
private int totalPages;
private int numberOfElements;
private long totalElements;
private boolean previousPage;
private boolean firstPage;
private boolean nextPage;
private boolean lastPage;
private List<T> content;
private Sort sort;
public CustomPageImpl() {
super(new ArrayList<>());
}
@Override
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
@Override
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
@Override
public int getNumberOfElements() {
return numberOfElements;
}
public void setNumberOfElements(int numberOfElements) {
this.numberOfElements = numberOfElements;
}
@Override
public long getTotalElements() {
return totalElements;
}
public void setTotalElements(long totalElements) {
this.totalElements = totalElements;
}
public boolean isPreviousPage() {
return previousPage;
}
public void setPreviousPage(boolean previousPage) {
this.previousPage = previousPage;
}
public boolean isFirstPage() {
return firstPage;
}
public void setFirstPage(boolean firstPage) {
this.firstPage = firstPage;
}
public boolean isNextPage() {
return nextPage;
}
public void setNextPage(boolean nextPage) {
this.nextPage = nextPage;
}
public boolean isLastPage() {
return lastPage;
}
public void setLastPage(boolean lastPage) {
this.lastPage = lastPage;
}
@Override
public List<T> getContent() {
return content;
}
public void setContent(List<T> content) {
this.content = content;
}
@Override
public Sort getSort() {
return sort;
}
public void setSort(Sort sort) {
this.sort = sort;
}
public Page<T> pageImpl() {
return new PageImpl<>(getContent(), new PageRequest(getNumber(),
getSize(), getSort()), getTotalElements());
}
}
Jackson Fehler nicht vergessen '@JsonIgnoreProperties hinzufügen (ignoreUnknown = wahr) 'als eine Klassenannotation. Diese Eigenschaft wird dazu beitragen, die zusätzlichen Funktionen zu ignorieren, die eine benutzerdefinierte Zuordnung erfordern würden. –