Package org.miaixz.bus.core.beans.copier
Class CopyOptions
java.lang.Object
org.miaixz.bus.core.beans.copier.CopyOptions
- All Implemented Interfaces:
Serializable
属性拷贝选项
包括:
1、限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类
2、是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null
3、忽略的属性列表,设置一个属性列表,不拷贝这些属性值
- Since:
- Java 17+
- Author:
- Kimi Liu
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected boolean是否自动转换为驼峰方式 此设置用于解决Bean和Map转换中的匹配问题而设置,并不是一个强制参数。 当map转bean时,如果map中是下划线等非驼峰模式,自动匹配对应的驼峰字段,避免出现字段不拷贝问题。 当bean转bean时,由于字段命名不规范,使用了非驼峰方式,增加兼容性。protected Converter自定义类型转换器,默认使用全局万能转换器转换protected Class<?> 限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类 如果目标对象是Map,源对象是Bean,则作用于源对象上protected UnaryOperator<MutableEntry<String, Object>> 字段属性名和属性值编辑器,用于自定义属性转换规则(例如驼峰转下划线等),自定义属性值转换规则(例如null转""等)protected boolean是否忽略字段大小写protected boolean是否忽略字段注入错误protected boolean是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入nullprotected boolean是否覆盖目标值,如果不覆盖,会先读取目标对象的值,为null则写,否则忽略。如果覆盖,则不判断直接写protected boolean是否支持transient关键字修饰和@Transient注解,如果支持,被修饰的字段或方法对应的字段将被忽略。 -
Constructor Summary
ConstructorsConstructorDescription构造拷贝选项CopyOptions(Class<?> editable, boolean ignoreNullValue, String... ignoreProperties) 构造拷贝选项 -
Method Summary
Modifier and TypeMethodDescriptionprotected ObjectconvertField(Type targetType, Object fieldValue) 使用自定义转换器转换字段值 如果自定义转换器为null,则返回原值。protected MutableEntry<String, Object> 编辑字段值protected PropDescfindPropDesc(Map<String, PropDesc> targetPropDescMap, String sKeyStr) 查找Map对应Bean的名称 尝试原名称、转驼峰名称、isXxx去掉is的名称设置忽略字段的大小写设置忽略字段的注入错误设置忽略空值,当源对象的值为null时,忽略而不注入此值static CopyOptionsof()创建拷贝选项static CopyOptions创建拷贝选项setAutoTransCamelCase(boolean autoTransCamelCase) 设置是否自动转换为驼峰方式 一般用于map转bean和bean转bean出现非驼峰格式时,在尝试转换失败的情况下,是否二次检查转为驼峰匹配。 此设置用于解决Bean和Map转换中的匹配问题而设置,并不是一个强制参数。 当map转bean时,如果map中是下划线等非驼峰模式,自动匹配对应的驼峰字段,避免出现字段不拷贝问题。 当bean转bean时,由于字段命名不规范,使用了非驼峰方式,增加兼容性。setConverter(Converter converter) 设置自定义类型转换器,默认使用全局万能转换器转换。setEditable(Class<?> editable) 设置限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性setFieldEditor(UnaryOperator<MutableEntry<String, Object>> editor) 设置字段属性编辑器,用于自定义属性转换规则,例如驼峰转下划线等 此转换器只针对源端的字段做转换,请确认转换后与目标端字段一致 当转换后的字段名为null时忽略这个字段 需要注意的是,当使用ValueProvider作为数据提供者时,这个映射是相反的,即参数中key为目标Bean的名称,而返回值是提供者中的key,并且对值的修改无效setFieldMapping(Map<String, String> fieldMapping) 设置拷贝属性的字段映射,用于不同的属性之前拷贝做对应表用 需要注意的是,当使用ValueProvider作为数据提供者时,这个映射是相反的,即fieldMapping中key为目标Bean的名称,而value是提供者中的keysetIgnoreCase(boolean ignoreCase) 设置是否忽略字段的大小写setIgnoreError(boolean ignoreError) 设置是否忽略字段的注入错误setIgnoreNullValue(boolean ignoreNullVall) 设置是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入nullsetIgnoreProperties(String... ignoreProperties) 设置忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值<P,R> CopyOptions setIgnoreProperties(FunctionX<P, R>... funcs) 设置忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值,Lambda方式setOverride(boolean override) 设置是否覆盖目标值,如果不覆盖,会先读取目标对象的值,为null则写,否则忽略。如果覆盖,则不判断直接写setPropertiesFilter(BiPredicate<Field, Object> propertiesFilter) setTransientSupport(boolean transientSupport) 设置是否支持transient关键字修饰和@Transient注解,如果支持,被修饰的字段或方法对应的字段将被忽略。protected booleantestPropertyFilter(Field field, Object value) 测试是否保留字段,true保留,false不保留
-
Field Details
-
editable
限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类 如果目标对象是Map,源对象是Bean,则作用于源对象上 -
ignoreNullValue
protected boolean ignoreNullValue是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null -
ignoreError
protected boolean ignoreError是否忽略字段注入错误 -
ignoreCase
protected boolean ignoreCase是否忽略字段大小写 -
fieldEditor
字段属性名和属性值编辑器,用于自定义属性转换规则(例如驼峰转下划线等),自定义属性值转换规则(例如null转""等) -
transientSupport
protected boolean transientSupport是否支持transient关键字修饰和@Transient注解,如果支持,被修饰的字段或方法对应的字段将被忽略。 -
override
protected boolean override是否覆盖目标值,如果不覆盖,会先读取目标对象的值,为null则写,否则忽略。如果覆盖,则不判断直接写 -
autoTransCamelCase
protected boolean autoTransCamelCase是否自动转换为驼峰方式 此设置用于解决Bean和Map转换中的匹配问题而设置,并不是一个强制参数。- 当map转bean时,如果map中是下划线等非驼峰模式,自动匹配对应的驼峰字段,避免出现字段不拷贝问题。
- 当bean转bean时,由于字段命名不规范,使用了非驼峰方式,增加兼容性。
但是bean转Map和map转map时,没有使用这个参数,是因为没有匹配的必要,转map不存在无法匹配到的问题,因此此参数无效。
-
converter
自定义类型转换器,默认使用全局万能转换器转换
-
-
Constructor Details
-
CopyOptions
public CopyOptions()构造拷贝选项 -
CopyOptions
构造拷贝选项- Parameters:
editable- 限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性ignoreNullValue- 是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入nullignoreProperties- 忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值
-
-
Method Details
-
of
创建拷贝选项- Returns:
- 拷贝选项
-
of
public static CopyOptions of(Class<?> editable, boolean ignoreNullValue, String... ignoreProperties) 创建拷贝选项- Parameters:
editable- 限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性ignoreNullValue- 是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入nullignoreProperties- 忽略的属性列表,设置一个属性列表,不拷贝这些属性值- Returns:
- 拷贝选项
-
setEditable
设置限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性- Parameters:
editable- 限制的类或接口- Returns:
- CopyOptions
-
setIgnoreNullValue
设置是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null- Parameters:
ignoreNullVall- 是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null- Returns:
- CopyOptions
-
ignoreNullValue
设置忽略空值,当源对象的值为null时,忽略而不注入此值- Returns:
- CopyOptions
-
setPropertiesFilter
- Parameters:
propertiesFilter- 属性过滤器- Returns:
- CopyOptions
-
setIgnoreProperties
设置忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值- Parameters:
ignoreProperties- 忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值- Returns:
- CopyOptions
-
setIgnoreProperties
设置忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值,Lambda方式- Type Parameters:
P- 参数类型R- 返回值类型- Parameters:
funcs- 忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值- Returns:
- CopyOptions
-
setIgnoreError
设置是否忽略字段的注入错误- Parameters:
ignoreError- 是否忽略注入错误- Returns:
- CopyOptions
-
ignoreError
设置忽略字段的注入错误- Returns:
- CopyOptions
-
setIgnoreCase
设置是否忽略字段的大小写- Parameters:
ignoreCase- 是否忽略大小写- Returns:
- CopyOptions
-
ignoreCase
设置忽略字段的大小写- Returns:
- CopyOptions
-
setFieldMapping
设置拷贝属性的字段映射,用于不同的属性之前拷贝做对应表用 需要注意的是,当使用ValueProvider作为数据提供者时,这个映射是相反的,即fieldMapping中key为目标Bean的名称,而value是提供者中的key- Parameters:
fieldMapping- 拷贝属性的字段映射,用于不同的属性之前拷贝做对应表用- Returns:
- CopyOptions
-
setFieldEditor
设置字段属性编辑器,用于自定义属性转换规则,例如驼峰转下划线等 此转换器只针对源端的字段做转换,请确认转换后与目标端字段一致 当转换后的字段名为null时忽略这个字段 需要注意的是,当使用ValueProvider作为数据提供者时,这个映射是相反的,即参数中key为目标Bean的名称,而返回值是提供者中的key,并且对值的修改无效- Parameters:
editor- 字段属性编辑器,用于自定义属性转换规则,例如驼峰转下划线等- Returns:
- CopyOptions
-
editField
编辑字段值- Parameters:
fieldName- 字段名fieldValue- 字段值- Returns:
- 编辑后的字段值
-
setTransientSupport
设置是否支持transient关键字修饰和@Transient注解,如果支持,被修饰的字段或方法对应的字段将被忽略。- Parameters:
transientSupport- 是否支持- Returns:
- this
-
setOverride
设置是否覆盖目标值,如果不覆盖,会先读取目标对象的值,为null则写,否则忽略。如果覆盖,则不判断直接写- Parameters:
override- 是否覆盖目标值- Returns:
- this
-
setAutoTransCamelCase
设置是否自动转换为驼峰方式 一般用于map转bean和bean转bean出现非驼峰格式时,在尝试转换失败的情况下,是否二次检查转为驼峰匹配。 此设置用于解决Bean和Map转换中的匹配问题而设置,并不是一个强制参数。- 当map转bean时,如果map中是下划线等非驼峰模式,自动匹配对应的驼峰字段,避免出现字段不拷贝问题。
- 当bean转bean时,由于字段命名不规范,使用了非驼峰方式,增加兼容性。
但是bean转Map和map转map时,没有使用这个参数,是因为没有匹配的必要,转map不存在无法匹配到的问题,因此此参数无效。
- Parameters:
autoTransCamelCase- 是否自动转换为驼峰方式- Returns:
- this
-
setConverter
设置自定义类型转换器,默认使用全局万能转换器转换。- Parameters:
converter- 转换器- Returns:
- this
-
convertField
使用自定义转换器转换字段值 如果自定义转换器为null,则返回原值。- Parameters:
targetType- 目标类型fieldValue- 字段值- Returns:
- 编辑后的字段值
-
testPropertyFilter
测试是否保留字段,true保留,false不保留- Parameters:
field- 字段value- 值- Returns:
- 是否保留
-
findPropDesc
查找Map对应Bean的名称 尝试原名称、转驼峰名称、isXxx去掉is的名称- Parameters:
targetPropDescMap- 目标bean的属性描述MapsKeyStr- 键或字段名- Returns:
PropDesc
-