[英]Map String Array into a POJO with Dozer
我正在嘗試使用推土機將List<String[]>
轉換為List<Object>
但無法使用mapper API配置將索引值映射到屬性字段。
如何將String[]
的成員映射到單個對象字段中,而每個索引都針對特定字段? (例如[0] -> name
和[1] -> role
)
DozerBeanMapper mapper = new DozerBeanMapper();
BeanMappingBuilder builder = new BeanMappingBuilder() {
@Override
protected void configure() {
mapping(String[].class, User.class)
.fields(this_(), "name"); // HOW do I specify index?**
}
};
mapper.addMapping(builder);
List<String[]> users = new ArrayList<>();
String[] user1 = {"Jill", "SDE"};
String[] user2 = {"Jack", "PM"};
users.add(user1);
users.add(user2);
List<User> userList = mapObjects(mapper, users, User.class);
mapObjects()
在哪里;
private static <T1, T2> List<T2> mapObjects(DozerBeanMapper mapper, List<T1> sourceList, Class<T2> destinationClazz) {
try {
return sourceList.stream()
.map(i -> mapper.map(i, destinationClazz))
.collect(Collectors.toList());
} catch (Exception e) {
...
}
return new ArrayList<>();
}
和User
類;
class User {
String name;
String role;
// getter & setter
}
它與以下配置完美配合;
DozerBeanMapper mapper = new DozerBeanMapper();
BeanMappingBuilder builder = new BeanMappingBuilder() {
@Override
protected void configure() {
mapping(String[].class, User.class)
.fields(this_(), "name", FieldsMappingOptions.customConverterId("arrToName"))
.fields(this_(), "role", FieldsMappingOptions.customConverterId("arrToRole"));
}
};
final Map<String, CustomConverter> customConverterMap = new HashMap<>();
customConverterMap.put("arrToName", new ArrToNameConverter());
customConverterMap.put("arrToRole", new ArrToRoleConverter());
mapper.setCustomConvertersWithId(customConverterMap);
mapper.addMapping(builder);
利用自定義轉換器將String[]
映射到name
和role
字段的邏輯,這些轉換器針對輸入String[]
的特定索引。 使用dozer
,您基本上可以定義自定義轉換器並為其指定一個ID,然后在字段映射FieldsMappingOptions.customConverterId("{id}")
使用這些ID對其進行引用。
其中ArrToNameConverter
;
public class ArrToNameConverter extends DozerConverter<String[], String> {
public ArrToNameConverter() {
super(String[].class, String.class);
}
@Override
public String convertTo(String[] strings, String user) {
return strings[0];
}
@Override
public String[] convertFrom(String user, String[] strings) {
return new String[0];
}
}
和ArrToRoleConverter
;
public class ArrToRoleConverter extends DozerConverter<String[], String> {
public ArrToRoleConverter() {
super(String[].class, String.class);
}
@Override
public String convertTo(String[] strings, String user) {
return strings[1];
}
@Override
public String[] convertFrom(String user, String[] strings) {
return new String[0];
}
}
使用上面的mapper
,我可以得到以下結果;
[User(name=Jill, role=SDE), User(name=Jack, role=PM)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.