嗨,我尝试将以下Source类映射到以下Destation类。我使用了以下映射以将字符串值映射到列表字符串。它没有正确映射。我需要知道如何使用Dozer将2个字符串值映射到一个目标字符串列表中。
public class SourceClass {
protected String streetName;
protected String additionalStreetName;
}
public class Destination {
protected List<String> addressLine;
}
<mapping map-id="newId" >
<class-a>myPackage.SourceClass </class-a>
<class-b>myPackage.Destination</class-b>
<field>
<a>streetName</a>
<b>addressLine[0]</b>
</field>
<field>
<a>additionalStreetName</a>
<b>addressLine[1]</b>
</field>
</mapping>
您需要在Java
中创建一个自定义转换器类。
参考推土机自定义转换器,转到标题新自定义转换器API。
您的转换器类需要像这样扩展DozerConverter
:
SourceClassToDestinationConverter extends DozerConverter <SourceClass, Destination> implements MapperAware
然后,您必须在自定义转换器配置中定义要用来代替映射器的转换器,如下所示:
<configuration>
<custom-converters>
<converter
type="some.package.converter.SourceClassToDestinationConverter ">
<class-a>myPackage.SourceClass</class-a>
<class-b>myPackage.Destination</class-b>
</converter>
...
</custom-converters>
</configuration>
为此,您需要使用自定义转换器。
文档将为您提供更全面的理解,但本质上,目前dozer不知道如何将字符串转换为列表,因此您必须告诉它。
自定义转换器将以字符串值作为源,以列表作为目标,并将收到的字符串添加到列表中。
类似于这样的东西:
public class TestCustomConverter extends DozerConverter {
public NewDozerConverter() {
super(String.class, List.class);
}
public List<String> convertTo(String source, List<String> destination) {
if (source == null) {
return new ArrayList<>();
}
if (destination == null) {
destination = new ArrayList<>();
}
destination.add(source);
return destination;
}
public String convertFrom(List<String> source, String destination {
return null;
}
}
您的映射将如下所示:
<mapping map-id="newId" >
<class-a>myPackage.SourceClass </class-a>
<class-b>myPackage.Destination</class-b>
<field custom-converter="TestCustomConverter">
<a>streetName</a>
<b>addressLine</b>
</field>
<field custom-converter="TestCustomConverter">
<a>additionalStreetName</a>
<b>addressLine</b>
</field>
</mapping>
只需通过Hint
标签指定目标列表中对象的类型,让Dozer
知道您想要在目标列表中创建的对象类型:
<field>
<a>streetName</a>
<b>addressLine[0]</b>
<b-hint>java.lang.String</b-hint>
</field>
<field>
<a>additionalStreetName</a>
<b>addressLine[1]</b>
<b-hint>java.lang.String</b-hint>
</field>
不需要自定义转换器。
如何将字符串映射到列表,并将列表映射到字符串? 考虑到我们有以下班级 在Dozer和Orika中,我们可以使用以下代码行轻松映射 如何在MapStruct中进行相同类型的映射?在哪里可以找到有关mapstruct的更多示例?
我有一个字符串格式的日期列表,如下所示: 我需要以这样的方式映射它,所以我将有一个年份字符串的列表——就像这样: 我的想法是修剪字符串的开头,然后将其附加到新的年份列表中。 最有效的方法是什么?
我有下面的结构,我想用MapStruct映射这个。 下面是mapstruct为toDTO方法生成的实现 下面是mapstruct为toEntity方法生成的实现 我的问题是方法只在文本不为空时设置注释。但是方法不检查空文本或空文本。因此,如果我在DTO中获得,它将创建一个新的comment对象并将文本设置为null。如何避免这一点?有人能解释一下这种行为并建议我正确的做法吗?谢了!
问题内容: 我想创建一个字符串映射到实例。这是正确的方法吗? 问题答案: 每当我想使用A时,我都发现切片是正确的选择,例如
我正在研究这样的句子结构: 我现在需要所有可能的组合从字典中形成这个句子,比如:
当我试图将从表t_comment_photo查询的userPhoto映射到java类ToyComment中的列表元素时,我得到了错误。 我试图修复的resultMap是: 我尝试了和,但都不起作用。 怎么把它修好?