@@ -366,6 +366,47 @@ void cantDeserializeFizListUseHeaders() throws Exception {
366366 assertThat (((Buz ) buzs .get (0 )).getField ()).isEqualTo ("foo" );
367367 }
368368
369+ @ Test
370+ void concreteInListRegression () throws Exception {
371+ byte [] bytes = "[{\" name\" :\" bar\" }]" .getBytes ();
372+ MessageProperties messageProperties = new MessageProperties ();
373+ messageProperties .setInferredArgumentType (getClass ().getDeclaredMethod ("fooLister" ).getGenericReturnType ());
374+ messageProperties .setHeader ("__TypeId__" , List .class .getName ());
375+ messageProperties .setHeader ("__ContentTypeId__" , Object .class .getName ());
376+ Message message = new Message (bytes , messageProperties );
377+ Jackson2JsonMessageConverter j2Converter = new Jackson2JsonMessageConverter ();
378+ @ SuppressWarnings ("unchecked" )
379+ List <Foo > foos = (List <Foo >) j2Converter .fromMessage (message );
380+ assertThat (foos ).hasSize (1 );
381+ assertThat (foos .get (0 ).getName ()).isEqualTo ("bar" );
382+ }
383+
384+ @ Test
385+ void concreteInMapRegression () throws Exception {
386+ byte [] bytes = "{\" test\" :{\" field\" :\" baz\" }}" .getBytes ();
387+ MessageProperties messageProperties = new MessageProperties ();
388+ messageProperties .setInferredArgumentType (getClass ().getDeclaredMethod ("stringQuxLister" ).getGenericReturnType ());
389+ messageProperties .setHeader ("__TypeId__" , Map .class .getName ());
390+ messageProperties .setHeader ("__KeyTypeId__" , String .class .getName ());
391+ messageProperties .setHeader ("__ContentTypeId__" , Object .class .getName ());
392+ Message message = new Message (bytes , messageProperties );
393+ Jackson2JsonMessageConverter j2Converter = new Jackson2JsonMessageConverter ();
394+
395+ @ SuppressWarnings ("unchecked" )
396+ Map <String , Qux > foos = (Map <String , Qux >) j2Converter .fromMessage (message );
397+ assertThat (foos ).hasSize (1 );
398+ assertThat (foos .keySet ().iterator ().next ()).isEqualTo ("test" );
399+ assertThat (foos .values ().iterator ().next ().getField ()).isEqualTo ("baz" );
400+ }
401+
402+ public List <Foo > fooLister () {
403+ return null ;
404+ }
405+
406+ public Map <String , Qux > stringQuxLister () {
407+ return null ;
408+ }
409+
369410 public List <Baz > bazLister () {
370411 return null ;
371412 }
@@ -507,6 +548,9 @@ public static class Qux implements Baz {
507548
508549 private String field ;
509550
551+ public Qux () {
552+ }
553+
510554 public Qux (String field ) {
511555 this .field = field ;
512556 }
0 commit comments