public class BeanUtil extends Object
把一个拥有对属性进行set和get方法的类,我们就可以称之为JavaBean。
| Constructor and Description |
|---|
BeanUtil() |
| Modifier and Type | Method and Description |
|---|---|
static Map<String,Object> |
beanToMap(Object bean,
boolean isToUnderlineCase,
boolean ignoreNullValue)
对象转Map
|
static Map<String,Object> |
beanToMap(Object bean,
Map<String,Object> targetMap,
boolean isToUnderlineCase,
boolean ignoreNullValue)
对象转Map
|
static <V> Map<String,V> |
beanToMap(Object bean,
Map<String,V> targetMap,
boolean ignoreNullValue,
UnaryOperator<MutableEntry<Object,Object>> keyEditor)
对象转Map
通过实现 UnaryOperator 可以自定义字段值,如果这个Editor返回null则忽略这个字段,以便实现:
1. |
static <V> Map<String,V> |
beanToMap(Object bean,
Map<String,V> targetMap,
CopyOptions copyOptions)
对象转Map
通过自定义 CopyOptions 完成抓换选项,以便实现:
1. |
static Map<String,Object> |
beanToMap(Object bean,
String... properties)
将bean的部分属性转换成map
可选拷贝哪些属性值,默认是不忽略值为 null的值的。 |
static boolean |
checkBean(Object bean,
Predicate<Field> predicate)
检查Bean
遍历Bean的字段并断言检查字段,当某个字段: 断言为 true 时,返回true并不再检查后续字段;断言为 false时,继续检查后续字段 |
static <T> T |
copyProperties(Object source,
Class<T> tClass,
String... ignoreProperties)
按照Bean对象属性创建对应的Class对象,并忽略某些属性
|
static <T> T |
copyProperties(Object source,
T target,
boolean ignoreCase)
复制Bean对象属性
|
static <T> T |
copyProperties(Object source,
T target,
CopyOptions copyOptions)
复制Bean对象属性
限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类 |
static <T> T |
copyProperties(Object source,
T target,
String... ignoreProperties)
复制Bean对象属性
限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类 |
static <T> List<T> |
copyToList(Collection<?> collection,
Class<T> targetType)
复制集合中的Bean属性
此方法遍历集合中每个Bean,复制其属性后加入一个新的 List中。 |
static <T> List<T> |
copyToList(Collection<?> collection,
Class<T> targetType,
CopyOptions copyOptions)
复制集合中的Bean属性
此方法遍历集合中每个Bean,复制其属性后加入一个新的 List中。 |
static DynaBean |
createDynaBean(Object bean)
创建动态Bean
|
static void |
descForEach(Class<?> clazz,
Consumer<? super PropDesc> action)
遍历Bean的属性
|
static <T> T |
edit(T bean,
UnaryOperator<Field> editor)
编辑Bean的字段,static字段不会处理
例如需要对指定的字段做判空操作、null转""操作等等。 |
static <T> T |
fillBean(T bean,
ValueProvider<String> valueProvider,
CopyOptions copyOptions)
填充Bean的核心方法
|
static <T> T |
fillBeanWithMap(Map<?,?> map,
T bean,
CopyOptions copyOptions)
使用Map填充Bean对象
|
static PropertyEditor |
findEditor(Class<?> type)
查找类型转换器
PropertyEditor |
static BeanDesc |
getBeanDesc(Class<?> clazz)
获取
BeanDesc Bean描述信息 |
static String |
getFieldName(String getterOrSetterName)
获取Getter或Setter方法名对应的字段名称,规则如下:
getXxxx获取为xxxx,如getName得到name。
|
static <T> T |
getProperty(Object bean,
String expression)
获取Bean中的属性值
|
static PropertyDescriptor |
getPropertyDescriptor(Class<?> clazz,
String fieldName)
获得Bean类属性描述,大小写敏感
|
static PropertyDescriptor |
getPropertyDescriptor(Class<?> clazz,
String fieldName,
boolean ignoreCase)
获得Bean类属性描述
|
static Map<String,PropertyDescriptor> |
getPropertyDescriptorMap(Class<?> clazz,
boolean ignoreCase)
获得字段名和字段描述Map,获得的结果会缓存在
BeanInfoCache中 |
static PropertyDescriptor[] |
getPropertyDescriptors(Class<?> clazz)
获得Bean字段描述数组
|
static boolean |
hasEmptyField(Object bean,
String... ignoreFieldNames)
|
static boolean |
hasGetter(Class<?> clazz)
判断是否为Bean对象
判定方法是否存在只有无参数的getXXX方法或者isXXX方法 |
static boolean |
hasNullField(Object bean,
String... ignoreFieldNames)
判断Bean是否包含值为
null的属性对象本身为 null也返回true |
static boolean |
hasPublicField(Class<?> clazz)
指定类中是否有public类型字段(static字段除外)
|
static boolean |
hasSetter(Class<?> clazz)
判断是否有Setter方法
判定方法是否存在只有一个参数的setXXX方法 |
static boolean |
isEmpty(Object bean,
String... ignoreFieldNames)
判断Bean是否为空对象,空对象表示本身为
null或者所有属性都为null此方法不判断static属性 |
static boolean |
isMatchName(Object bean,
String beanClassName,
boolean isSimple)
给定的Bean的类名是否匹配指定类名字符串
如果isSimple为 true,则只匹配类名而忽略包名,例如:org.dromara.hutool.TestEntity只匹配TestEntity如果isSimple为 false,则匹配包括包名的全类名,例如:org.dromara.hutool.TestEntity匹配org.dromara.hutool.TestEntity |
static boolean |
isNotEmpty(Object bean,
String... ignoreFieldNames)
判断Bean是否为非空对象,非空对象表示本身不为
null或者含有非null属性的对象 |
static boolean |
isReadableBean(Class<?> clazz)
判断是否为可读的Bean对象,判定方法是:
1、是否存在只有无参数的getXXX方法或者isXXX方法
2、是否存在public类型的字段
|
static boolean |
isWritableBean(Class<?> clazz)
判断是否为可写Bean对象,判定方法是:
1、是否存在只有一个参数的setXXX方法
2、是否存在public类型的字段
|
static void |
setProperty(Object bean,
String expression,
Object value)
设置Bean中的属性值
|
static <T> T |
toBean(Object source,
Class<T> clazz)
对象或Map转Bean
|
static <T> T |
toBean(Object source,
Class<T> clazz,
CopyOptions options)
对象或Map转Bean
|
static <T> T |
toBean(Object source,
Supplier<T> targetSupplier,
CopyOptions options)
对象或Map转Bean
|
static Map<String,Object> |
toBeanMap(Object bean)
将Bean包装为Map形式
|
static <T> T |
trimStrFields(T bean,
String... ignoreFields)
把Bean里面的String属性做trim操作。
|
public static DynaBean createDynaBean(Object bean)
bean - 普通Bean或MapDynaBeanpublic static PropertyEditor findEditor(Class<?> type)
PropertyEditortype - 需要转换的目标类型PropertyEditorpublic static BeanDesc getBeanDesc(Class<?> clazz)
BeanDesc Bean描述信息clazz - Bean类BeanDescpublic static void descForEach(Class<?> clazz, Consumer<? super PropDesc> action)
clazz - Bean类action - 每个元素的处理类public static PropertyDescriptor[] getPropertyDescriptors(Class<?> clazz) throws BeanException
clazz - Bean类BeanException - 获取属性异常public static Map<String,PropertyDescriptor> getPropertyDescriptorMap(Class<?> clazz, boolean ignoreCase) throws BeanException
BeanInfoCache中clazz - Bean类ignoreCase - 是否忽略大小写BeanException - 获取属性异常public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz, String fieldName) throws BeanException
clazz - Bean类fieldName - 字段名BeanException - 获取属性异常public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz, String fieldName, boolean ignoreCase) throws BeanException
clazz - Bean类fieldName - 字段名ignoreCase - 是否忽略大小写BeanException - 获取属性异常public static <T> T getProperty(Object bean, String expression)
T - 属性值类型bean - Bean对象,支持Map、List、Collection、Arrayexpression - 表达式,例如:person.friend[5].namenull或者express为空,返回nullBeanPath.getValue(Object)public static void setProperty(Object bean, String expression, Object value)
bean - Bean对象,支持Map、List、Collection、Arrayexpression - 表达式,例如:person.friend[5].namevalue - 属性值BeanPath.setValue(Object, Object)public static <T> T toBean(Object source, Class<T> clazz)
T - 转换的Bean类型source - Bean对象或Mapclazz - 目标的Bean类型public static <T> T toBean(Object source, Class<T> clazz, CopyOptions options)
T - 转换的Bean类型source - Bean对象或Mapclazz - 目标的Bean类型options - 属性拷贝选项public static <T> T toBean(Object source, Supplier<T> targetSupplier, CopyOptions options)
T - 转换的Bean类型source - Bean对象或Map或ValueProvidertargetSupplier - 目标的Bean创建器options - 属性拷贝选项public static <T> T fillBean(T bean,
ValueProvider<String> valueProvider,
CopyOptions copyOptions)
T - Bean类型bean - BeanvalueProvider - 值提供者copyOptions - 拷贝选项,见 CopyOptionspublic static <T> T fillBeanWithMap(Map<?,?> map, T bean, CopyOptions copyOptions)
T - Bean类型map - Mapbean - BeancopyOptions - 属性复制选项 CopyOptionspublic static Map<String,Object> toBeanMap(Object bean)
bean - BeanBeanMappublic static Map<String,Object> beanToMap(Object bean, String... properties)
null的值的。bean - beanproperties - 需要拷贝的属性值,null或空表示拷贝所有值public static Map<String,Object> beanToMap(Object bean, boolean isToUnderlineCase, boolean ignoreNullValue)
bean - bean对象isToUnderlineCase - 是否转换为下划线模式ignoreNullValue - 是否忽略值为空的字段public static Map<String,Object> beanToMap(Object bean, Map<String,Object> targetMap, boolean isToUnderlineCase, boolean ignoreNullValue)
bean - bean对象targetMap - 目标的MapisToUnderlineCase - 是否转换为下划线模式ignoreNullValue - 是否忽略值为空的字段public static <V> Map<String,V> beanToMap(Object bean, Map<String,V> targetMap, boolean ignoreNullValue, UnaryOperator<MutableEntry<Object,Object>> keyEditor)
UnaryOperator 可以自定义字段值,如果这个Editor返回null则忽略这个字段,以便实现:
1. 字段筛选,可以去除不需要的字段 2. 字段变换,例如实现驼峰转下划线 3. 自定义字段前缀或后缀等等
V - Map中值类型bean - bean对象targetMap - 目标的MapignoreNullValue - 是否忽略值为空的字段keyEditor - 属性字段(Map的key)编辑器,用于筛选、编辑key,如果这个Editor返回null则忽略这个字段public static <V> Map<String,V> beanToMap(Object bean, Map<String,V> targetMap, CopyOptions copyOptions)
CopyOptions 完成抓换选项,以便实现:
1. 字段筛选,可以去除不需要的字段 2. 字段变换,例如实现驼峰转下划线 3. 自定义字段前缀或后缀等等 4. 字段值处理 ...
V - Map中值类型bean - bean对象targetMap - 目标的MapcopyOptions - 拷贝选项public static <T> T copyProperties(Object source, Class<T> tClass, String... ignoreProperties)
T - 对象类型source - 源Bean对象tClass - 目标ClassignoreProperties - 不拷贝的的属性列表public static <T> T copyProperties(Object source, T target, String... ignoreProperties)
T - 目标类型source - 源Bean对象target - 目标Bean对象ignoreProperties - 不拷贝的的属性列表public static <T> T copyProperties(Object source, T target, boolean ignoreCase)
T - 目标类型source - 源Bean对象target - 目标Bean对象ignoreCase - 是否忽略大小写public static <T> T copyProperties(Object source, T target, CopyOptions copyOptions)
T - 目标类型source - 源Bean对象target - 目标Bean对象copyOptions - 拷贝选项,见 CopyOptionspublic static <T> List<T> copyToList(Collection<?> collection, Class<T> targetType)
List中。T - Bean类型collection - 原Bean集合targetType - 目标Bean类型public static <T> List<T> copyToList(Collection<?> collection, Class<T> targetType, CopyOptions copyOptions)
List中。T - Bean类型collection - 原Bean集合targetType - 目标Bean类型copyOptions - 拷贝选项public static boolean isMatchName(Object bean, String beanClassName, boolean isSimple)
true,则只匹配类名而忽略包名,例如:org.dromara.hutool.TestEntity只匹配TestEntityfalse,则匹配包括包名的全类名,例如:org.dromara.hutool.TestEntity匹配org.dromara.hutool.TestEntitybean - BeanbeanClassName - Bean的类名isSimple - 是否只匹配类名而忽略包名,true表示忽略包名public static <T> T edit(T bean,
UnaryOperator<Field> editor)
T - 被编辑的Bean类型bean - beaneditor - 编辑器函数public static <T> T trimStrFields(T bean,
String... ignoreFields)
通常bean直接用来绑定页面的input,用户的输入可能首尾存在空格,通常保存数据库前需要把首尾空格去掉
T - Bean类型bean - Bean对象ignoreFields - 不需要trim的Field名称列表(不区分大小写)public static boolean isEmpty(Object bean, String... ignoreFieldNames)
null或者所有属性都为nullbean - Bean对象ignoreFieldNames - 忽略检查的字段名true - 空 / false - 非空public static boolean isNotEmpty(Object bean, String... ignoreFieldNames)
null或者含有非null属性的对象bean - Bean对象ignoreFieldNames - 忽略检查的字段名true - 非空 / false - 空public static boolean isReadableBean(Class<?> clazz)
1、是否存在只有无参数的getXXX方法或者isXXX方法
2、是否存在public类型的字段
clazz - 待测试类hasGetter(Class),
hasPublicField(Class)public static boolean isWritableBean(Class<?> clazz)
1、是否存在只有一个参数的setXXX方法
2、是否存在public类型的字段
clazz - 待测试类hasSetter(Class),
hasPublicField(Class)public static boolean hasSetter(Class<?> clazz)
clazz - 待测试类public static boolean hasGetter(Class<?> clazz)
clazz - 待测试类public static boolean hasPublicField(Class<?> clazz)
clazz - 待测试类public static boolean hasNullField(Object bean, String... ignoreFieldNames)
null的属性null也返回truebean - Bean对象ignoreFieldNames - 忽略检查的字段名null的属性,true - 包含 / false - 不包含public static boolean hasEmptyField(Object bean, String... ignoreFieldNames)
bean - Bean对象ignoreFieldNames - 忽略检查的字段名null的属性,true - 包含 / false - 不包含public static boolean checkBean(Object bean, Predicate<Field> predicate)
true 时,返回true并不再检查后续字段;false时,继续检查后续字段bean - Beanpredicate - 断言public static String getFieldName(String getterOrSetterName)
IllegalArgumentExceptiongetterOrSetterName - Getter或Setter方法名IllegalArgumentException - 非Getter或Setter方法Copyright © 2025. All rights reserved.