通过Spring RestTemplate 做分页

[java]  view plain  copy
  1. <span style="font-size:18px;">数据查询端:  
  2. </span>  
 
  
[java]  view plain  copy
  1. Page<MyObject> hosts=service.listByXX(MyObject);  
 接收端: 
  
ParameterizedTypeReference<Page<MyObject>> responseType = new ParameterizedTypeReference<Page<MyObject>>() { };ResponseEntity<Page<MyObject>> result = restTemplate.exchange(url, HttpMethod.GET, null/*httpEntity*/, responseType);List<MyObject> searchResult = result.getBody().getContent();
 
  

异常:

org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not construct instance of org.springframework.data.domain.Page, 
problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information at [Source: java.io.PushbackInputStream@3be1e1f2; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of org.springframework.data.domain.Page, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information

查了好久找到了解决方案:

总结下来,是三种方案:1、自定义接收数据模型(属性要和page传递数据一致)

                                            2、自定义类实现Page接口

                                            3、自定义类继承PageImpl类(此类为Page接口实现类)

代码:

1、自定义接收数据类型

 
  
[java]  view plain  copy
  1. public class PageResultModel<E> {  
  2.   
  3.     private int number;  
  4.   
  5.     private int size;  
  6.   
  7.     private List<E> content;  
  8.   
  9.     private boolean last;  
  10.   
  11.     private int totalPages;  
  12.   
  13.     private int totalElements;  
  14.   
  15.     private Object sort;  
  16.   
  17.     private boolean first;  
  18.   
  19.     private int numberOfElements;  
  20.   
  21.     private boolean next;  
  22.   
  23.     private boolean previous;  
  24.   
  25.     public int getNumber() {return number;}  
  26.   
  27.     public void setNumber(int number) {this.number = number;}  
  28.   
  29.     public int getTotalPages() {return totalPages;}  
  30.   
  31.     public void setTotalPages(int totalPages) {this.totalPages = totalPages;}  
  32.   
  33.     public int getNumberOfElements() {return numberOfElements;}  
  34.   
  35.     public void setNumberOfElements(int numberOfElements) {this.numberOfElements = numberOfElements;}  
  36.   
  37.     public boolean isFirst() {return first;}  
  38.   
  39.     public void setFirst(boolean first) {this.first = first;}  
  40.   
  41.     public int getTotalElements() {return totalElements;}  
  42.   
  43.     public void setTotalElements(int totalElements) {this.totalElements = totalElements;}  
  44.   
  45.     public Object getSort() {return sort;}  
  46.   
  47.     public void setSort(Object sort) {this.sort = sort;}  
  48.   
  49.     public boolean isLast() {return last;}  
  50.   
  51.     public void setLast(boolean last) {this.last = last;}  
  52.   
  53.     public int getSize() {return size;}  
  54.   
  55.     public void setSize(int size) {this.size = size;}  
  56.   
  57.     public List<E> getContent() {return content;}  
  58.   
  59.     public void setContent(List<E> content) {this.content = content;}  
  60.   
  61.     public boolean hasPrevious() {  
  62.         return previous;  
  63.     }  
  64.   
  65.     public void setPrevious(boolean previous) {  
  66.         this.previous = previous;  
  67.     }  
  68.   
  69.     public boolean hasNext() {  
  70.         return next;  
  71.     }  
  72.   
  73.     public void setNext(boolean next) {  
  74.         this.next = next;  
  75.     }  
  76.   
  77. }  
第二种和第三种可以在这个网址看到: https://stackoverflow.com/questions/34647303/spring-resttemplate-with-paginated-api

ps:其实还有一个方法:把Page换成map,用map保存必要数据然后返回,虽然很low的感觉,不过还是写下来了
数据查询端:
 
  
[java]  view plain  copy
  1. Page<MyObject> page=service.listByXX(myObject);  
  2.   
  3. map.put("data",page.getContent);  
  4. map.put("totalSize",page.getTotalElements());  
  5. .....  
接收的时候改成:
[java]  view plain  copy
  1. <span style="font-size:14px;">ParameterizedTypeReference<Map> responseType = new ParameterizedTypeReference<Map>() { };  
  2.   
  3. ResponseEntity<Map> result = restTemplate.exchange(url, HttpMethod.GET, null/*httpEntity*/, responseType);  
  4.   
  5. Map searchResult = result.getBody();</span>  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值