Skip to content

Map properties do not auto-grow like Lists do when binding [SPR-7285] #11944

@spring-projects-issues

Description

@spring-projects-issues

Keith Donald opened SPR-7285 and commented

@RooJavaBean
@RooToString
public class JavaBean {
	
	private Integer number;
	
	@DateTimeFormat(iso=ISO.DATE)
	private Date date;
	
	// list will autogrow as its dereferenced e.g. numbers[0]=foo
	private List<Integer> numbers;
	
	// map will autogrow as its deferenced e.g. fruits[1]=apple
	private Map<Integer, String> fruits;
	
}

Binding to numbers works

Binding to fruits does not:

SpEl should also be tested

org.springframework.beans.NullValueInNestedPathException: Invalid property 'fruits' of bean class [org.springframework.samples.mvc.convert.JavaBean]: Could not instantiate property type [java.util.Map] to auto-grow nested property path: java.lang.InstantiationException: java.util.Map
	org.springframework.beans.BeanWrapperImpl.newValue(BeanWrapperImpl.java:628)
	org.springframework.beans.BeanWrapperImpl.createDefaultPropertyValue(BeanWrapperImpl.java:600)
	org.springframework.beans.BeanWrapperImpl.setDefaultValue(BeanWrapperImpl.java:594)
	org.springframework.beans.BeanWrapperImpl.getNestedBeanWrapper(BeanWrapperImpl.java:558)
	org.springframework.beans.BeanWrapperImpl.getBeanWrapperForPropertyPath(BeanWrapperImpl.java:532)
	org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:886)
	org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76)
	org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:673)
	org.springframework.validation.DataBinder.doBind(DataBinder.java:569)
	org.springframework.web.bind.WebDataBinder.doBind(WebDataBinder.java:190)
	org.springframework.web.bind.ServletRequestDataBinder.bind(ServletRequestDataBinder.java:110)
	org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.doBind(AnnotationMethodHandlerAdapter.java:712)
	org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:804)
	org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:358)
	org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:170)
	org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:421)
	org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:409)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:774)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

{codE}

Affects: 3.0.2

Referenced from: commits 7f91153

1 votes, 4 watchers

Metadata

Metadata

Assignees

Labels

in: coreIssues in core modules (aop, beans, core, context, expression)type: enhancementA general enhancement

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions