Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java将Web客户端POST请求映射到不同的对象而不复制代码_Java_Post_Webclient_Code Cleanup - Fatal编程技术网

Java将Web客户端POST请求映射到不同的对象而不复制代码

Java将Web客户端POST请求映射到不同的对象而不复制代码,java,post,webclient,code-cleanup,Java,Post,Webclient,Code Cleanup,我有一个post请求,我希望它将响应映射到调用它的2个api的不同对象。请求总是返回BookResponse 在这里,我映射了返回图书名称的响应: public Mono<String> getBookName(BookRequest bookRequest) { return client .post() .uri("PATH") .contentType(MediaType.APPLICATION_JSO

我有一个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));
 }
公共Mono getBookName(BookRequest BookRequest){ 返回客户端 .post() .uri(“路径”) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION\u JSON\u UTF8) .正文(请求书)) .retrieve() .bodyToMono(BookResponse.class) .doOnNext(此::validateResponseStatus) .map(BookResponse::getBookName) .doOnError(可丢弃->日志错误(可丢弃)); } 在这里,相同的调用只是将响应映射到另一个对象,其中包含book author+request对象:

 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));
公共Mono getBookName(BookRequest BookRequest){ 返回客户端 .post() .uri(“路径”) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION\u JSON\u UTF8) .body(requestBody)) .retrieve() .bodyToMono(BookResponse.class) .doOnNext(此::validateResponseStatus) .map(bookResponse->new BookObject(bookResponse.getName(),bookRequest) .doOnError(可丢弃->日志错误(可丢弃)); 有没有不复制代码的方法?
谢谢

我将把通用代码提取到一个单独的方法中:

public Something getSomething() {
  client
        .post()
        .uri("PATH")
        .contentType(MediaType.APPLICATION_JSON)
        .accept(MediaType.APPLICATION_JSON_UTF8)
        .body(requestBody))
        .retrieve()
        .bodyToMono(BookResponse.class)
        .doOnNext(this::validateResponseStatus)
}

然后,在您的方法中,您只需执行以下操作:

Something something = getSomething();
return something.map(bookResponse -> new BookObject(bookResponse.getName(), bookRequest).doOnError(throwable -> logError(throwable));


端点如何知道何时返回一个或另一个响应?在这是一个可回答的问题之前,您需要添加更多关于您试图实现的内容的上下文。@JustinAlbano它总是返回相同的对象BookResponse,但我将其映射到相关的预期对象。
Something something = getSomething();
return something.map(BookResponse::getBookName).doOnError(throwable -> logError(throwable));