enabling users to set custom statusCode

This commit is contained in:
Deepankar Dixit
2022-05-23 14:50:23 -04:00
parent 1702b269f0
commit 11666058ad

View File

@@ -18,6 +18,8 @@ package org.springframework.cloud.function.adapter.gcp;
import java.io.BufferedReader;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.function.Function;
@@ -32,6 +34,7 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.cloud.function.context.AbstractSpringFunctionAdapterInitializer;
import org.springframework.cloud.function.context.config.ContextFunctionCatalogAutoConfiguration;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.util.Assert;
import org.springframework.util.MimeTypeUtils;
@@ -91,18 +94,38 @@ public class FunctionInvoker extends AbstractSpringFunctionAdapterInitializer<Ht
*/
@Override
public void service(HttpRequest httpRequest, HttpResponse httpResponse) throws Exception {
Function<Message<BufferedReader>, Message<byte[]>> function = lookupFunction();
Message<BufferedReader> message = getInputType() == Void.class || getInputType() == null ? null
: MessageBuilder.withPayload(httpRequest.getReader()).copyHeaders(httpRequest.getHeaders()).build();
Message<byte[]> result = function.apply(message);
if (result != null) {
MessageHeaders headers = result.getHeaders();
httpResponse.getWriter().write(new String(result.getPayload(), StandardCharsets.UTF_8));
for (Entry<String, Object> header : result.getHeaders().entrySet()) {
httpResponse.appendHeader(header.getKey(), header.getValue().toString());
for (Entry<String, Object> header : headers.entrySet()) {
Object values = header.getValue();
if (values instanceof Collection<?>) {
StringBuilder sb = new StringBuilder();
for (Iterator iterator = ((Collection<?>) values).iterator(); iterator.hasNext();) {
sb.append(iterator.next());
if (iterator.hasNext()) {
sb.append(",");
}
}
httpResponse.appendHeader(header.getKey(), sb.toString());
}
else {
httpResponse.appendHeader(header.getKey(), header.getValue().toString());
}
}
httpRequest.getContentType().ifPresent(contentType -> httpResponse.setContentType(contentType));
if (headers.containsKey("statusCode")) {
httpResponse.setStatusCode((int) headers.get("statusCode"));
}
}
}