生产者
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);
}
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
因为Page
、PageImp
没有无参的构造方法。解决方法:自己创建一个类定义需要的字段
@GetMapping(value="/handbooks")
Mono<PageVO> getHandbookAndPaging(@RequestParam String page, @RequestParam String size);
@Data
public class PageVO {
List<Handbook> content;
}
postman测试结果
![](https://img2022.cnblogs.com/blog/892740/202211/892740-20221126114604355-1010969033.png)