gson MapStruct:如何将属性从“java.lang.Object”Map到“java.lang.String”

yquaqz18  于 2022-11-06  发布在  Java
关注(0)|答案(2)|浏览(235)

MapStrut的新功能;对象转换为字符串错误:
[错误] /util/LicenseMapper.java:[11,23]无法将属性“java.lang.对象许可证.自定义字段[].value”Map到“java.lang.字符串许可证.自定义字段[].value”。请考虑声明/实现Map方法:字符串Map(java.lang.Object值)。
编码:

@Mapper
public interface LicenseMapper {
    List<License> jsonToDao(List<com.integrator.vo.license.License> source);
}

vo.许可证包含具有以下属性的自定义字段列表

@SerializedName("Value")
@Expose
private Object value;

Json有一个字段作为对象的输入,因为它可能是布尔或字符串或任何东西,所以我把它Map到对象中。而在dao层中有相同的字符串字段。(在自定义Map器中,我只是字符串。值,但不知道如何使用Mapstrut实现它)
谁能告诉我LicenseMapper中需要哪些设置才能将Object转换为String?
许可证结构-源和目标:

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

源中的自定义字段结构(已删除gson注解):

.
.
private String name;
private Object dataType;
private Object value;

目标中的自定义字段结构

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

xkftehaa1#

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

@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);
jjhzyzn0

jjhzyzn02#

★可以这样做:
@Map(目标=“您的目标”,源=“您的类.客户字段.值”)
enter image description here

相关问题