@@ -116,23 +116,21 @@ public List<MimeType> getDecodableMimeTypes(ResolvableType targetType) {
116116 }
117117
118118 @ Override
119+ @ SuppressWarnings ("unchecked" )
119120 public Flux <Object > decode (Publisher <DataBuffer > inputStream , ResolvableType elementType ,
120121 @ Nullable MimeType mimeType , @ Nullable Map <String , Object > hints ) {
121122 return Flux .defer (() -> {
122123 KSerializer <Object > serializer = serializer (elementType );
123- if (serializer == null ) {
124+ KSerializer <Object > listSerializer = serializer (ResolvableType .forClassWithGenerics (List .class , elementType ));
125+ if (serializer == null || listSerializer == null ) {
124126 return Mono .error (new DecodingException ("Could not find KSerializer for " + elementType ));
125127 }
126128 return this .stringDecoder
127129 .decode (inputStream , elementType , mimeType , hints )
128- .handle ((string , sink ) -> {
129- try {
130- sink .next (format ().decodeFromString (serializer , string ));
131- }
132- catch (IllegalArgumentException ex ) {
133- sink .error (processException (ex ));
134- }
135- });
130+ .flatMapIterable (string -> string .startsWith ("[" ) ?
131+ (List <Object >) format ().decodeFromString (listSerializer , string ) :
132+ List .of (format ().decodeFromString (serializer , string )))
133+ .onErrorMap (IllegalArgumentException .class , this ::processException );
136134 });
137135 }
138136
0 commit comments