enabling users to set custom statusCode
This commit is contained in:
@@ -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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user