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

时间:2019-12-31 04:16:51

标签: java gson dto mapstruct mapper

MapStrut的新功能;对象到字符串错误:

  

[错误] /util/LicenseMapper.java:[11,23]无法将属性“ java.lang.Object license.customFields []。value”映射到“ java.lang.String license.customFields []”。值”。考虑声明/实现一个映射方法:“ java.lang.String map(java.lang.Object value)”。

代码:

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

vo.license包含属性为的CustomFields列表

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

Json已将一个字段的输入作为对象,因为它可能是布尔值或字符串或其他任何东西,因此我已将其映射到对象中。而dao层在String中具有相同的字段。 (在自定义映射器中,我只是String.valueof,但不确定如何使用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;

2 个答案:

答案 0 :(得分:1)

您可以尝试对表达式使用注释@Mapping

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

答案 1 :(得分:0)

你可以这样做:

@Mapping(target = "yourTarget", source = "yourClass.custField.value")

enter image description here