JSONMappingException-无法反序列化Java对象

使用ObjectMapper取消序列化对象时出现以下错误:

JSONMappingException无法构造org.springframework.data.Page的实例,问题:抽象类型只能用其他类型信息实例化。

我正在尝试将JSON字符串序列化为org.springframework.data.Page表示类型页面的Spring数据对象T。

该User班是一个简单的POJOfirstlast名称。我要反序列化的JSON字符串是:

{

"content": [

{

"firstname": "John",

"lastname": "Doe"

},

{

"firstname": "Jane",

"lastname": "Doe"

}

],

"size": 2,

"number": 0,

"sort": [

{

"direction": "DESC",

"property": "timestamp",

"ascending": false

}

],

"totalPages": 150,

"numberOfElements": 100,

"totalElements": 15000,

"firstPage": true,

"lastPage": false

}

这将导致异常:

Page<User> userPage = (Page<User>) new ObjectMapper().mapToJavaObject(json, new TypeReference<Page<User>>(){};

由于PageSpring对象,因此无法修改它,我认为这与我在别处看到此问题的方式有些不同。有什么想法吗?

回答:

我最终使用了类似的东西,按照@Perception的建议创建了一个bean:

import java.util.ArrayList;

import java.util.List;

import org.springframework.data.domain.PageImpl;

import org.springframework.data.domain.PageRequest;

import org.springframework.data.domain.Sort;

public class PageImplBean<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 PageImplBean() {

super(new ArrayList<T>());

}

public int getNumber() {

return number;

}

public void setNumber(int number) {

this.number = number;

}

public int getSize() {

return size;

}

public void setSize(int size) {

this.size = size;

}

public int getTotalPages() {

return totalPages;

}

public void setTotalPages(int totalPages) {

this.totalPages = totalPages;

}

public int getNumberOfElements() {

return numberOfElements;

}

public void setNumberOfElements(int numberOfElements) {

this.numberOfElements = numberOfElements;

}

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;

}

public List<T> getContent() {

return content;

}

public void setContent(List<T> content) {

this.content = content;

}

public Sort getSort() {

return sort;

}

public void setSort(Sort sort) {

this.sort = sort;

}

public PageImpl<T> pageImpl() {

return new PageImpl<T>(getContent(), new PageRequest(getNumber(),

getSize(), getSort()), getTotalElements());

}

}

然后修改您的代码以使用具体的类并获取PageImpl:

@SuppressWarnings("unchecked")

Page<User> userPage = ((PageImplBean<User>)new ObjectMapper().readValue(json, new TypeReference<PageImplBean<User>>() {})).pageImpl();

以上是 JSONMappingException-无法反序列化Java对象 的全部内容, 来源链接: utcz.com/qa/413758.html

回到顶部