无法确定自动增长默认值的属性类型

来自Spring Projects Issue Tracker

豆子:

public class JavaBean { private NestedBean nested; } public class NestedBean { private String foo; private List list; private Map map; } 

绑定:

 http://localhost:8080/mvc-showcase/convert/bean?nested.foo=bar&nested.list[0].foo=baz&nested.map[key].list[0].foo=bip 

例外:

 NullValueInNestedPathException: Invalid property 'nested.map[key]' of bean class [org.springframework.samples.mvc.convert.JavaBean]: Could not determine property type for auto-growing a default value 

使用LazyMap如下:

 public class LazyMap implements Map { private Map nestedMap; private Class valueType; public LazyMap(Class valueType) { nestedMap = new HashMap(); this.valueType = valueType; } @Override public void clear() { nestedMap.clear(); } @Override public boolean containsKey(Object key) { return nestedMap.containsKey(key); } @Override public boolean containsValue(Object value) { return nestedMap.containsValue(value); } @Override public Set> entrySet() { return nestedMap.entrySet(); } @SuppressWarnings("unchecked") @Override public V get(Object key) { if (!containsKey(key)) { try { put((K) key, valueType.newInstance()); } catch (Exception e) { throw new IllegalArgumentException(e); } } return nestedMap.get(key); } @Override public boolean isEmpty() { return nestedMap.isEmpty(); } @Override public Set keySet() { return nestedMap.keySet(); } @Override public V put(K key, V value) { return nestedMap.put(key, value); } @Override public void putAll(Map m) { nestedMap.putAll(m); } @Override public V remove(Object key) { return nestedMap.remove(key); } @Override public int size() { return nestedMap.size(); } @Override public Collection values() { return nestedMap.values(); } } 

豆:

 public class NestedBean { private String foo; private List list; private Map map = new LazyMap(NestedBean.class); }