Skip to content

Commit 7bcad7e

Browse files
committed
GH-1235 Fix support for text/* contentType
Resolves #1235
1 parent 86359ba commit 7bcad7e

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/src/main/java/org/springframework/cloud/function/adapter/gcp/FunctionInvoker.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public void service(HttpRequest httpRequest, HttpResponse httpResponse) throws E
117117
Message<BufferedReader> message = this.functionWrapped.getInputType() == Void.class || this.functionWrapped.getInputType() == null ? null
118118
: MessageBuilder.withPayload(httpRequest.getReader()).copyHeaders(httpRequest.getHeaders()).build();
119119

120-
Message<byte[]> result = function.apply(message);
120+
Message<?> result = function.apply(message);
121121

122122
if (result != null) {
123123
MessageHeaders headers = result.getHeaders();
@@ -130,7 +130,8 @@ else if (result.getHeaders().containsKey("Content-Type")) {
130130
else {
131131
httpRequest.getContentType().ifPresent(contentType -> httpResponse.setContentType(contentType));
132132
}
133-
httpResponse.getWriter().write(new String(result.getPayload(), StandardCharsets.UTF_8));
133+
String content = result.getPayload() instanceof String strPayload ? strPayload : new String((byte[]) result.getPayload(), StandardCharsets.UTF_8);
134+
httpResponse.getWriter().write(content);
134135
for (Entry<String, Object> header : headers.entrySet()) {
135136
Object values = header.getValue();
136137
if (values instanceof Collection<?>) {

spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java

+21-3
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
import org.springframework.cloud.function.json.GsonMapper;
5656
import org.springframework.cloud.function.json.JacksonMapper;
5757
import org.springframework.cloud.function.json.JsonMapper;
58-
import org.springframework.cloud.function.utils.PrimitiveTypesFromStringMessageConverter;
5958
import org.springframework.context.ApplicationContext;
6059
import org.springframework.context.ConfigurableApplicationContext;
6160
import org.springframework.context.annotation.Bean;
@@ -71,13 +70,17 @@
7170
import org.springframework.core.convert.support.DefaultConversionService;
7271
import org.springframework.lang.Nullable;
7372
import org.springframework.messaging.Message;
73+
import org.springframework.messaging.MessageHeaders;
7474
import org.springframework.messaging.converter.ByteArrayMessageConverter;
7575
import org.springframework.messaging.converter.CompositeMessageConverter;
76+
import org.springframework.messaging.converter.ContentTypeResolver;
7677
import org.springframework.messaging.converter.MessageConverter;
7778
import org.springframework.messaging.converter.StringMessageConverter;
7879
import org.springframework.stereotype.Component;
7980
import org.springframework.util.ClassUtils;
8081
import org.springframework.util.CollectionUtils;
82+
import org.springframework.util.InvalidMimeTypeException;
83+
import org.springframework.util.MimeType;
8184
import org.springframework.util.StringUtils;
8285

8386
/**
@@ -133,8 +136,23 @@ public FunctionRegistry functionCatalog(List<MessageConverter> messageConverters
133136

134137
mcList.add(new JsonMessageConverter(jsonMapper));
135138
mcList.add(new ByteArrayMessageConverter());
136-
mcList.add(new StringMessageConverter());
137-
mcList.add(new PrimitiveTypesFromStringMessageConverter(conversionService));
139+
StringMessageConverter stringConverter = new StringMessageConverter();
140+
stringConverter.setSerializedPayloadClass(String.class);
141+
stringConverter.setContentTypeResolver(new ContentTypeResolver() {
142+
@Override
143+
public MimeType resolve(MessageHeaders headers) throws InvalidMimeTypeException {
144+
if (headers.containsKey(MessageHeaders.CONTENT_TYPE)) {
145+
if (headers.get(MessageHeaders.CONTENT_TYPE).toString().startsWith("text")) {
146+
return MimeType.valueOf("text/plain");
147+
}
148+
else {
149+
return MimeType.valueOf(headers.get(MessageHeaders.CONTENT_TYPE).toString());
150+
}
151+
}
152+
return null;
153+
}
154+
});
155+
mcList.add(stringConverter);
138156

139157
messageConverter = new SmartCompositeMessageConverter(mcList, () -> {
140158
return context.getBeansOfType(MessageConverterHelper.class).values();

0 commit comments

Comments
 (0)