Java Mapping Web Client POST请求到不同的对象而无需复制代码

我有一个发布请求,我希望它将响应映射到调用它的 2 个 api 的不同对象。请求总是返回 BookResponse。


这里我映射响应以返回书名:


public Mono<String> getBookName(BookRequest bookRequest) {

  return client

            .post()

            .uri("PATH")

            .contentType(MediaType.APPLICATION_JSON)

            .accept(MediaType.APPLICATION_JSON_UTF8)

            .body(bookRequest))

            .retrieve()

            .bodyToMono(BookResponse.class)

            .doOnNext(this::validateResponseStatus)

            .map(BookResponse::getBookName)

            .doOnError(throwable -> logError(throwable));

 }

在这里,同样的调用只是将响应映射到包含书作者 + 请求对象的其他对象:


 public Mono<BookObject> getBookName(BookRequest bookRequest) {

        return client

            .post()

            .uri("PATH")

            .contentType(MediaType.APPLICATION_JSON)

            .accept(MediaType.APPLICATION_JSON_UTF8)

            .body(requestBody))

            .retrieve()

            .bodyToMono(BookResponse.class)

            .doOnNext(this::validateResponseStatus)

            .map(bookResponse -> new BookObject(bookResponse.getName(), bookRequest)

            .doOnError(throwable -> logError(throwable));

有没有不复制代码的方法?谢谢


宝慕林4294392
浏览 125回答 1
1回答

斯蒂芬大帝

我会将通用代码提取到一个单独的方法中:public Something getSomething() {&nbsp; client&nbsp; &nbsp; &nbsp; &nbsp; .post()&nbsp; &nbsp; &nbsp; &nbsp; .uri("PATH")&nbsp; &nbsp; &nbsp; &nbsp; .contentType(MediaType.APPLICATION_JSON)&nbsp; &nbsp; &nbsp; &nbsp; .accept(MediaType.APPLICATION_JSON_UTF8)&nbsp; &nbsp; &nbsp; &nbsp; .body(requestBody))&nbsp; &nbsp; &nbsp; &nbsp; .retrieve()&nbsp; &nbsp; &nbsp; &nbsp; .bodyToMono(BookResponse.class)&nbsp; &nbsp; &nbsp; &nbsp; .doOnNext(this::validateResponseStatus)}然后,在您的方法中,您只需要执行以下操作:Something something = getSomething();return something.map(bookResponse -> new BookObject(bookResponse.getName(), bookRequest).doOnError(throwable -> logError(throwable));或者Something something = getSomething();return something.map(BookResponse::getBookName).doOnError(throwable -> logError(throwable));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java