对象转map时嵌套对象字段也转下划线
时间: 2023-07-21 17:22:17 浏览: 104
好的,您的问题是关于对象转成map的嵌套对象字段也要转成下划线,是吗?如果是的话,您可以使用递归的方式来实现嵌套对象字段的转换。具体实现可以参考以下代码:
```java
public Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {
Map<String, Object> map = new HashMap<>();
Class<?> clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String name = field.getName();
Object value = field.get(obj);
if (value != null) {
if (isPrimitive(value.getClass())) {
map.put(name.replaceAll("([a-z])([A-Z])", "$1_$2").toLowerCase(), value);
} else {
map.put(name.replaceAll("([a-z])([A-Z])", "$1_$2").toLowerCase(), objectToMap(value));
}
}
}
return map;
}
private boolean isPrimitive(Class<?> clazz) {
return clazz.isPrimitive() || clazz.isAssignableFrom(String.class) || clazz.isAssignableFrom(Integer.class)
|| clazz.isAssignableFrom(Long.class) || clazz.isAssignableFrom(Double.class)
|| clazz.isAssignableFrom(Float.class) || clazz.isAssignableFrom(Boolean.class);
}
```
在上面的代码中,我们使用了正则表达式将驼峰命名转换成下划线命名,并使用递归的方式来实现嵌套对象字段的转换。同时,我们也判断了字段的类型是否为基本类型或者是String类型,如果是的话,直接将其转换成map,否则继续递归调用objectToMap方法进行转换。
阅读全文