Java将Web客户端POST请求映射到不同的对象而不复制代码
我有一个post请求,我希望它将响应映射到调用它的2个api的不同对象。请求总是返回BookResponse 在这里,我映射了返回图书名称的响应: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
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));