Fix ParameterizedType + contextClass support in Jackson converter
Issue: SPR-14470
This commit is contained in:
@@ -240,6 +240,29 @@ public class RequestResponseBodyMethodProcessorTests {
|
||||
assertEquals("Jad", result.getName());
|
||||
}
|
||||
|
||||
@Test // SPR-14470
|
||||
public void resolveParameterizedWithTypeVariableArgument() throws Exception {
|
||||
Method method = MyParameterizedControllerWithList.class.getMethod("handleDto", List.class);
|
||||
HandlerMethod handlerMethod = new HandlerMethod(new MySimpleParameterizedControllerWithList(), method);
|
||||
MethodParameter methodParam = handlerMethod.getMethodParameters()[0];
|
||||
|
||||
String content = "[{\"name\" : \"Jad\"}, {\"name\" : \"Robert\"}]";
|
||||
this.servletRequest.setContent(content.getBytes("UTF-8"));
|
||||
this.servletRequest.setContentType(MediaType.APPLICATION_JSON_VALUE);
|
||||
|
||||
List<HttpMessageConverter<?>> converters = new ArrayList<>();
|
||||
converters.add(new MappingJackson2HttpMessageConverter());
|
||||
RequestResponseBodyMethodProcessor processor = new RequestResponseBodyMethodProcessor(converters);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<SimpleBean> result = (List<SimpleBean>)
|
||||
processor.resolveArgument(methodParam, container, request, factory);
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals("Jad", result.get(0).getName());
|
||||
assertEquals("Robert", result.get(1).getName());
|
||||
}
|
||||
|
||||
@Test // SPR-11225
|
||||
public void resolveArgumentTypeVariableWithNonGenericConverter() throws Exception {
|
||||
Method method = MyParameterizedController.class.getMethod("handleDto", Identifiable.class);
|
||||
@@ -725,6 +748,17 @@ public class RequestResponseBodyMethodProcessorTests {
|
||||
void setId(Long id);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static abstract class MyParameterizedControllerWithList<DTO extends Identifiable> {
|
||||
|
||||
public void handleDto(@RequestBody List<DTO> dto) {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static class MySimpleParameterizedControllerWithList extends MyParameterizedControllerWithList<SimpleBean> {
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings({ "serial" })
|
||||
private static class SimpleBean implements Identifiable {
|
||||
|
||||
Reference in New Issue
Block a user