MapStruct:如何从映射属性;java.lang.Object到";“java.lang.String”;

MapStruct:如何从映射属性;java.lang.Object到";“java.lang.String”;,java,gson,dto,mapstruct,mapper,Java,Gson,Dto,Mapstruct,Mapper,MapStrub的新成员;对象到字符串错误: [错误]/util/LicenseMapper.java:[11,23]无法将属性“java.lang.Object license.customFields[].value”映射到“java.lang.String license.customFields[].value”。考虑声明/实现映射方法:“java. Lang.Stand map(java. Lang.Objor value)”.< /P> 代码: Json将一个字段的输入作为对象,因为

MapStrub的新成员;对象到字符串错误:

[错误]/util/LicenseMapper.java:[11,23]无法将属性“java.lang.Object license.customFields[].value”映射到“java.lang.String license.customFields[].value”。考虑声明/实现映射方法:“java. Lang.Stand map(java. Lang.Objor value)”.< /P> 代码:

Json将一个字段的输入作为对象,因为它可能是布尔值、字符串或任何内容,所以我将其映射到对象中。而在dao层中,字符串中有相同的字段。(在自定义映射器中,我仅使用String.valueof,但不确定如何使用mapstrop实现它)

有人能告诉我在LicenseMapper中将对象转换为字符串需要什么设置吗

许可证结构-源和目标:

.
.
private String notes;
private Boolean isIncomplete;
private List<CustomField> customFields = null;
private List<Allocation> allocations = null;

目标中的自定义字段结构

private String name;
private String datatype;
private String value;

您可以尝试将注释@Mapping与表达式一起使用

@Mapping(expression = "java( String.valueOf(source.getValue()) )", target = "value")
List<License> jsonToDao(List<com.integrator.vo.license.License> source);
映射(expression=“java(String.valueOf(source.getValue())”),target=“value”) 列表jsonToDao(列表源); 更新

@Mapper
public interface LicenseMapper {
LicenseMapper MAPPING = Mappers.getMapper(LicenseMapper.class);

List<License> entityListToDaoList(List<com.integrator.vo.license.License> source);

License entityToDao(com.integrator.vo.license.License source);

List<CustomField> customFieldListToCustomFieldList(List<*your custom field path*CustomField> source);

@Mapping(expression = "java( String.valueOf(source.getValue()) )", target = "value")
CustomField customFieldToCustomField(*your custom field path*CustomField source);
}
@Mapper
公共接口许可证映射程序{
LicenseMapper MAPPING=Mappers.getMapper(LicenseMapper.class);
列表实体ListToDaoList(列表源);
许可证实体TODAO(com.integrator.vo.License.License-source);
列表customFieldListToCustomFieldList(列表源);
@映射(expression=“java(String.valueOf(source.getValue())”,target=“value”)
CustomField customFieldToCustomField(*自定义字段路径*自定义字段源);
}
在代码中

import static ***.LicenseMapper.MAPPING;

***
List<License> myList = MAPPING.jsonToDao(mySource); 
导入静态***.LicenseMapper.MAPPING;
***
List myList=MAPPING.jsonToDao(mySource);

感谢您的回复,但它在结果类型java.util.List中表示->未知属性“值”。你是说“空的”吗?此值存在于许可证类中的列表中。。。如何用表达的方式提及那件事?哦,对不起。尝试将String.valueOf(value)替换为String.valueOf(source.getValue())让我试试。但许可证中不存在getValue。它存在于License.customFields.value中。而customFields的类型是ListThis->@Mapping(expression=“java(String.valueOf(source.customFields[].getValue())”,target=“value”),但无法修复。我更喜欢在映射器中创建这样的字段:“LicenseMapper Mapping=Mappers.getMapper(LicenseMapper.class);”这允许我导入静态方法import static***.LicenseMapper.MAPPING,然后我可以使用这样的方法:List myList=MAPPING.jsonToDao(mySource);我将把它添加到代码中
@Mapping(expression = "java( String.valueOf(source.getValue()) )", target = "value")
List<License> jsonToDao(List<com.integrator.vo.license.License> source);
@Mapper
public interface LicenseMapper {
LicenseMapper MAPPING = Mappers.getMapper(LicenseMapper.class);

List<License> entityListToDaoList(List<com.integrator.vo.license.License> source);

License entityToDao(com.integrator.vo.license.License source);

List<CustomField> customFieldListToCustomFieldList(List<*your custom field path*CustomField> source);

@Mapping(expression = "java( String.valueOf(source.getValue()) )", target = "value")
CustomField customFieldToCustomField(*your custom field path*CustomField source);
}
import static ***.LicenseMapper.MAPPING;

***
List<License> myList = MAPPING.jsonToDao(mySource);