Webclient returing null

Webclient returing null

提问人:astar 提问时间:10/31/2023 更新时间:10/31/2023 访问量:29

问:

我有 2 个 SpringCloudStream 应用程序,它们是 Kafka 上的生产者和消费者。Kafka Consumer 应用程序接收消息,调用 DB 和 Webclient 以接收一些信息并返回更新的对象。在下面面向使用者的代码中,WebClient 调用不会更新对象并为字段返回 null,但 DB 调用可以正常。 该服务本身运行良好。 请建议我在这里缺少什么。



@Service
public class BookService {

    @Autowired
    private BookRepository bookRepository;

    @Autowired
    private WebClient webClient;

    public Book updateBook(Book book) {
        book.setBookName(book.getBookName().toUpperCase());
        bookRepository.findById(book.getId()).ifPresent(book1 -> {
            book.setBookIsbn(book1.getBookIsbn()); //getting set
        });

        webClient
                .method(HttpMethod.GET)
                .uri("http://localhost:9898/rx/getBookDetails/" + book.getId())
                .contentType(MediaType.APPLICATION_JSON)
                .accept(MediaType.ALL)
                .retrieve()
                .onStatus(HttpStatus::isError, response -> Mono.error(new RuntimeException("Exception :: " + response)))
                .bodyToMono(Book.class)
                .retryWhen(Retry.backoff(3, Duration.ofSeconds(1)))
                .onErrorResume(error -> Mono.just(new Book()))
                .map(book1 -> {
                    book.setAuthorId(book1.getAuthorId()); //authorId = null
                    return book;
                });

        System.out.println("Book processed successfully...");
        return book;
}
}


弹簧启动 Web客户端 反应性的

评论

0赞 Sree Kumar 10/31/2023
我不知道,但这一行似乎表明即使有错误,也要返回一个空的.那么,您确定响应中没有错误吗?Mono.onErrorResume(error -> Mono.just(new Book()))Book
1赞 M. Deinum 10/31/2023
WebClient是被动的,你只定义一个事件流,你实际上并没有订阅它,因此它什么都不做。
0赞 knittl 10/31/2023
您永远不会对webClient
0赞 astar 10/31/2023
右。。。我添加了.subscribe();在最后,但它仍然是空的
0赞 knittl 10/31/2023
@astar订阅为 null?我对此表示怀疑,因为它返回订阅。

答: 暂无答案