From bc6ca20116e4e0c5b4ba4d3664f09a5fdc178bef Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 23 Sep 2021 16:04:00 +0200 Subject: [PATCH] Fix previous commit's byte[] handling --- .../rsocket/MessageAwareJsonDecoder.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) 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(