diff --git a/spring-cloud-function-rsocket/src/main/java/org/springframework/cloud/function/rsocket/MessageAwareJsonDecoder.java b/spring-cloud-function-rsocket/src/main/java/org/springframework/cloud/function/rsocket/MessageAwareJsonDecoder.java index 16cb4abc7..1398d3958 100644 --- a/spring-cloud-function-rsocket/src/main/java/org/springframework/cloud/function/rsocket/MessageAwareJsonDecoder.java +++ b/spring-cloud-function-rsocket/src/main/java/org/springframework/cloud/function/rsocket/MessageAwareJsonDecoder.java @@ -73,8 +73,7 @@ class MessageAwareJsonDecoder extends AbstractDecoder { if (messageMap.containsKey(FunctionRSocketUtils.PAYLOAD)) { Type requestedType = FunctionTypeUtils.getGenericType(targetType.getType()); Object payload; - if (String.class.isAssignableFrom(FunctionTypeUtils.getRawType(targetType.getType())) - || byte[].class.isAssignableFrom(FunctionTypeUtils.getRawType(targetType.getType()))) { + if (String.class.isAssignableFrom(FunctionTypeUtils.getRawType(targetType.getType()))) { Object rawPayload = messageMap.get(FunctionRSocketUtils.PAYLOAD); if (rawPayload instanceof byte[]) { payload = new String((byte[]) rawPayload, StandardCharsets.UTF_8); @@ -83,9 +82,31 @@ class MessageAwareJsonDecoder extends AbstractDecoder { payload = rawPayload; } } + else if (byte[].class.isAssignableFrom(FunctionTypeUtils.getRawType(targetType.getType()))) { + Object rawPayload = messageMap.get(FunctionRSocketUtils.PAYLOAD); + if (rawPayload instanceof String) { + payload = ((String) rawPayload).getBytes(StandardCharsets.UTF_8); + } + else { + payload = rawPayload; + } + } else { payload = this.jsonMapper.fromJson(messageMap.get(FunctionRSocketUtils.PAYLOAD), requestedType); } +// if (String.class.isAssignableFrom(FunctionTypeUtils.getRawType(targetType.getType())) +// || byte[].class.isAssignableFrom(FunctionTypeUtils.getRawType(targetType.getType()))) { +// Object rawPayload = messageMap.get(FunctionRSocketUtils.PAYLOAD); +// if (rawPayload instanceof byte[]) { +// payload = new String((byte[]) rawPayload, StandardCharsets.UTF_8); +// } +// else { +// payload = rawPayload; +// } +// } +// else { +// payload = this.jsonMapper.fromJson(messageMap.get(FunctionRSocketUtils.PAYLOAD), requestedType); +// } if (FunctionTypeUtils.isMessage(targetType.getType())) { return MessageBuilder.withPayload(payload).copyHeaders(