Skip to content

Commit

Permalink
chore: response extractor
Browse files Browse the repository at this point in the history
  • Loading branch information
guqing committed Sep 20, 2024
1 parent 305c6b6 commit 08538ba
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 4 deletions.
17 changes: 16 additions & 1 deletion src/main/java/run/halo/imagestream/client/ClientUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,31 @@
import lombok.experimental.UtilityClass;
import org.springframework.web.reactive.function.client.ClientResponse;
import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.server.ServerWebInputException;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
import run.halo.app.infra.utils.JsonUtils;

@UtilityClass
public class ClientUtils {

public static Mono<ServerResponse> responseExtractor(ClientResponse clientResponse) {
var serverResponseBuilder = ServerResponse.status(clientResponse.statusCode())
.headers(headers -> headers.addAll(clientResponse.headers().asHttpHeaders()));
return clientResponse.bodyToMono(JsonNode.class)
return clientResponse.bodyToMono(String.class)
.flatMap(ClientUtils::parseJsonNode)
.flatMap(serverResponseBuilder::bodyValue)
.switchIfEmpty(serverResponseBuilder.build());
}

private static Mono<JsonNode> parseJsonNode(String body) {
return Mono.fromCallable(() -> {
try {
return JsonUtils.jsonToObject(body, JsonNode.class);
} catch (Exception e) {
throw new ServerWebInputException(body);
}
})
.subscribeOn(Schedulers.boundedElastic());
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package run.halo.imagestream.client;

import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder;
import static org.springdoc.core.fn.builders.content.Builder.contentBuilder;
import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder;

import com.fasterxml.jackson.databind.node.ObjectNode;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import lombok.RequiredArgsConstructor;
import org.springdoc.core.fn.builders.operation.Builder;
import org.springdoc.webflux.core.fn.SpringdocRouteBuilder;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.reactive.function.server.RouterFunction;
Expand All @@ -32,6 +34,8 @@ public RouterFunction<ServerResponse> endpoint() {
.description("Search images")
.tag(tag)
.response(responseBuilder()
.content(contentBuilder()
.mediaType(MediaType.APPLICATION_JSON_VALUE))
.implementation(ObjectNode.class));
buildParam(builder);
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.context.event.EventListener;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
Expand Down Expand Up @@ -53,7 +55,7 @@ void createClients(BasicProp basicProp) {
WEB_CLIENTS.put(value.name(), pexelsClient);
break;
case PIXABAY:
var pixabayClient = createClient("https://pixabay.com/api", accessKey);
var pixabayClient = createClient("https://pixabay.com/api?key=" + accessKey, null);
WEB_CLIENTS.put(value.name(), pixabayClient);
break;
default:
Expand Down Expand Up @@ -86,9 +88,10 @@ private String fetchProvidedApiKey(WebClientType type) {
}

private WebClient createClient(String baseUrl, String authorizationValue) {
var builder = WebClient.builder().baseUrl(baseUrl);
var builder = WebClient.builder().baseUrl(baseUrl)
.defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
if (StringUtils.isNotBlank(authorizationValue)) {
builder.defaultHeader("Authorization", authorizationValue);
builder.defaultHeader(HttpHeaders.AUTHORIZATION, authorizationValue);
}
return builder.build();
}
Expand Down

0 comments on commit 08538ba

Please sign in to comment.