Java 映射 Web 客户端 POST 请求到不同的对象而不复制代码
Java Mapping Web Client POST request to different objects without copy the code
我有一个 post 请求,我希望它将响应映射到调用它的 2 api 的不同对象。请求总是 return BookResponse.
这里我将响应映射到 return 书名:
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));
有没有不用复制代码的方法?
谢谢
我会将公共代码提取到一个单独的方法中:
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));
或
Something something = getSomething();
return something.map(BookResponse::getBookName).doOnError(throwable -> logError(throwable));
我有一个 post 请求,我希望它将响应映射到调用它的 2 api 的不同对象。请求总是 return BookResponse.
这里我将响应映射到 return 书名:
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));
有没有不用复制代码的方法? 谢谢
我会将公共代码提取到一个单独的方法中:
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));
或
Something something = getSomething();
return something.map(BookResponse::getBookName).doOnError(throwable -> logError(throwable));