webflux reactive-feign 分页的实现

生产者

  • respository

package com.fengyun.medical.productservice.repositories;

import com.fengyun.medical.domain.Handbook;

import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.reactive.ReactiveSortingRepository;
import reactor.core.publisher.Flux;

public interface HandbookRepository extends ReactiveSortingRepository<Handbook, Integer> {
    Flux<Handbook> findAllByIsActiveIsTrue(Pageable pageable);
}
  • handler

  public Mono<ServerResponse> getHandbook(ServerRequest request) {
            Integer page = Integer.valueOf(request.queryParam("page").get());
            Integer size = Integer.valueOf(request.queryParam("size").get());
            System.out.println("请求页码:" + page);
            System.out.println("请求数量:" + size);
        return this.handbookService.getHandbook(PageRequest.of(page,size))
                .flatMap(data ->ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).bodyValue(data));
    }

消费者

  • 消费者在使用reactive-feign调用生产者时会报不能反序列化的错误。

Caused by: 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
 at [Source: java.io.PushbackInputStream@67635da8; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) ~[jackson-databind-2.6.4.jar:2.6.4]
    at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:892) ~[jackson-databind-2.6.4.jar:2.6.4]
    at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:139) ~[jackson-databind-2.6.4.jar:2.6.4]
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3736) ~[jackson-databind-2.6.4.jar:2.6.4]
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2810) ~[jackson-databind-2.6.4.jar:2.6.4]
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:221) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    ... 30 common frames omitted

因为PagePageImp没有无参的构造方法。解决方法:自己创建一个类定义需要的字段

   @GetMapping(value="/handbooks")
    Mono<PageVO> getHandbookAndPaging(@RequestParam String page, @RequestParam String size);
  • 自定义类

@Data
public class PageVO {
    List<Handbook> content;

}
  • postman测试结果



来自为知笔记(Wiz)


posted on 2022-11-24 23:19  白衣风云  阅读(279)  评论(0编辑  收藏  举报

导航