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

编程入门 行业动态 更新时间:2024-10-12 16:23:45
本文介绍了无法确定自动增长默认值的属性类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

来自 Spring Projects问题跟踪器

Beans:

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

Bind:

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<K, V> implements Map<K, V> { private Map<K, V> nestedMap; private Class<V> valueType; public LazyMap(Class<V> valueType) { nestedMap = new HashMap<K, V>(); 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<java.util.Map.Entry<K, V>> 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<K> keySet() { return nestedMap.keySet(); } @Override public V put(K key, V value) { return nestedMap.put(key, value); } @Override public void putAll(Map<? extends K, ? extends V> m) { nestedMap.putAll(m); } @Override public V remove(Object key) { return nestedMap.remove(key); } @Override public int size() { return nestedMap.size(); } @Override public Collection<V> values() { return nestedMap.values(); } }

Bean:

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

更多推荐

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

本文发布于:2023-07-15 13:08:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1111403.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:默认值   属性   类型

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!