@@ -117,7 +117,7 @@ public class FunctionInvoker implements HttpFunction, RawBackgroundFunction {
|
|||||||
Message<BufferedReader> message = this.functionWrapped.getInputType() == Void.class || this.functionWrapped.getInputType() == null ? null
|
Message<BufferedReader> message = this.functionWrapped.getInputType() == Void.class || this.functionWrapped.getInputType() == null ? null
|
||||||
: MessageBuilder.withPayload(httpRequest.getReader()).copyHeaders(httpRequest.getHeaders()).build();
|
: MessageBuilder.withPayload(httpRequest.getReader()).copyHeaders(httpRequest.getHeaders()).build();
|
||||||
|
|
||||||
Message<byte[]> result = function.apply(message);
|
Message<?> result = function.apply(message);
|
||||||
|
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
MessageHeaders headers = result.getHeaders();
|
MessageHeaders headers = result.getHeaders();
|
||||||
@@ -130,7 +130,8 @@ public class FunctionInvoker implements HttpFunction, RawBackgroundFunction {
|
|||||||
else {
|
else {
|
||||||
httpRequest.getContentType().ifPresent(contentType -> httpResponse.setContentType(contentType));
|
httpRequest.getContentType().ifPresent(contentType -> httpResponse.setContentType(contentType));
|
||||||
}
|
}
|
||||||
httpResponse.getWriter().write(new String(result.getPayload(), StandardCharsets.UTF_8));
|
String content = result.getPayload() instanceof String strPayload ? strPayload : new String((byte[]) result.getPayload(), StandardCharsets.UTF_8);
|
||||||
|
httpResponse.getWriter().write(content);
|
||||||
for (Entry<String, Object> header : headers.entrySet()) {
|
for (Entry<String, Object> header : headers.entrySet()) {
|
||||||
Object values = header.getValue();
|
Object values = header.getValue();
|
||||||
if (values instanceof Collection<?>) {
|
if (values instanceof Collection<?>) {
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ import org.springframework.cloud.function.core.FunctionInvocationHelper;
|
|||||||
import org.springframework.cloud.function.json.GsonMapper;
|
import org.springframework.cloud.function.json.GsonMapper;
|
||||||
import org.springframework.cloud.function.json.JacksonMapper;
|
import org.springframework.cloud.function.json.JacksonMapper;
|
||||||
import org.springframework.cloud.function.json.JsonMapper;
|
import org.springframework.cloud.function.json.JsonMapper;
|
||||||
import org.springframework.cloud.function.utils.PrimitiveTypesFromStringMessageConverter;
|
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.ConfigurableApplicationContext;
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
@@ -71,13 +70,17 @@ import org.springframework.core.convert.support.ConfigurableConversionService;
|
|||||||
import org.springframework.core.convert.support.DefaultConversionService;
|
import org.springframework.core.convert.support.DefaultConversionService;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.messaging.Message;
|
import org.springframework.messaging.Message;
|
||||||
|
import org.springframework.messaging.MessageHeaders;
|
||||||
import org.springframework.messaging.converter.ByteArrayMessageConverter;
|
import org.springframework.messaging.converter.ByteArrayMessageConverter;
|
||||||
import org.springframework.messaging.converter.CompositeMessageConverter;
|
import org.springframework.messaging.converter.CompositeMessageConverter;
|
||||||
|
import org.springframework.messaging.converter.ContentTypeResolver;
|
||||||
import org.springframework.messaging.converter.MessageConverter;
|
import org.springframework.messaging.converter.MessageConverter;
|
||||||
import org.springframework.messaging.converter.StringMessageConverter;
|
import org.springframework.messaging.converter.StringMessageConverter;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
import org.springframework.util.InvalidMimeTypeException;
|
||||||
|
import org.springframework.util.MimeType;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -133,8 +136,23 @@ public class ContextFunctionCatalogAutoConfiguration {
|
|||||||
|
|
||||||
mcList.add(new JsonMessageConverter(jsonMapper));
|
mcList.add(new JsonMessageConverter(jsonMapper));
|
||||||
mcList.add(new ByteArrayMessageConverter());
|
mcList.add(new ByteArrayMessageConverter());
|
||||||
mcList.add(new StringMessageConverter());
|
StringMessageConverter stringConverter = new StringMessageConverter();
|
||||||
mcList.add(new PrimitiveTypesFromStringMessageConverter(conversionService));
|
stringConverter.setSerializedPayloadClass(String.class);
|
||||||
|
stringConverter.setContentTypeResolver(new ContentTypeResolver() {
|
||||||
|
@Override
|
||||||
|
public MimeType resolve(MessageHeaders headers) throws InvalidMimeTypeException {
|
||||||
|
if (headers.containsKey(MessageHeaders.CONTENT_TYPE)) {
|
||||||
|
if (headers.get(MessageHeaders.CONTENT_TYPE).toString().startsWith("text")) {
|
||||||
|
return MimeType.valueOf("text/plain");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return MimeType.valueOf(headers.get(MessageHeaders.CONTENT_TYPE).toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mcList.add(stringConverter);
|
||||||
|
|
||||||
messageConverter = new SmartCompositeMessageConverter(mcList, () -> {
|
messageConverter = new SmartCompositeMessageConverter(mcList, () -> {
|
||||||
return context.getBeansOfType(MessageConverterHelper.class).values();
|
return context.getBeansOfType(MessageConverterHelper.class).values();
|
||||||
|
|||||||
Reference in New Issue
Block a user