长春哪家互联网做得好seo关键词大搜
在使用 openfeign 进行服务之间数据传输时发现了一个问题,数据在下游正常处理,响应到调用端数据也读取到了,但是就是 jackson 转对象序列化时出了问题,异常如下
Failed to complete request: feign.codec.DecodeException: Type definition error: [simple type, class com.xxx.common.core.model.PaginationInfo]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.xxx.common.core.model.PaginationInfo` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
原代码如下
import java.util.List;public class PaginationInfo {private Integer currentPages;private Integer total;private List records;private PaginationInfo(Builder builder) {setCurrentPages(builder.currentPages);setTotal(builder.total);setRecords(builder.records);}public static Builder builder() {return new Builder();}public Integer getCurrentPages() {return currentPages;}public void setCurrentPages(Integer currentPages) {this.currentPages = currentPages;}public Integer getTotal() {return total;}public void setTotal(Integer total) {this.total = total;}public List getRecords() {return records;}public void setRecords(List records) {this.records = records;}public static final class Builder {private Integer currentPages;private Integer total;private List records;private Builder() {}public Builder currentPages(Integer val) {currentPages = val;return this;}public Builder total(Integer val) {total = val;return this;}public Builder records(List val) {records = val;return this;}public PaginationInfo build() {return new PaginationInfo(this);}}
}
使用了链式编程进行赋值操作,按照上面的提示就是没有默认构造器,将private的构造器修改为public,添加一个默认构造器,效果如下
import java.util.List;public class PaginationInfo {private Integer currentPages;private Integer total;private List records;public PaginationInfo() {}public PaginationInfo(Builder builder) {setCurrentPages(builder.currentPages);setTotal(builder.total);setRecords(builder.records);}public static Builder builder() {return new Builder();}public Integer getCurrentPages() {return currentPages;}public void setCurrentPages(Integer currentPages) {this.currentPages = currentPages;}public Integer getTotal() {return total;}public void setTotal(Integer total) {this.total = total;}public List getRecords() {return records;}public void setRecords(List records) {this.records = records;}public static final class Builder {private Integer currentPages;private Integer total;private List records;private Builder() {}public Builder currentPages(Integer val) {currentPages = val;return this;}public Builder total(Integer val) {total = val;return this;}public Builder records(List val) {records = val;return this;}public PaginationInfo build() {return new PaginationInfo(this);}}
}
试了一下,运行正常。