gpt4 book ai didi

java - Mapstruct:嵌套对象的自定义映射方法

转载 作者:行者123 更新时间:2023-12-05 06:09:45 26 4
gpt4 key购买 nike

我想使用 mapstruct 在这些对象之间进行映射:

MyObj1
-List<MyObj2> myObj2List
--List<MyObj3> myObj3List
---string field1

MyObj4
-List<MyObj5> myObj5List
--List<MyObj6> myObj6List
---int field1

问题:我能否以某种方式告诉 mapstruct 将 field1 从字符串映射到 int,而不是默认的 Integer.parseInt(...)

改变内部对象的类型不是一个选项。我知道有一个注释

 @Mapping(source = "myObj2List.myObj3List.field1", target = "myObj5List.myObj6List.field1", qualifiedByName = "methodToMapWith")
public MyObj4 field1Mapper(MyObj1input);

@Named("methodToMapWith")
public static int methodToMapWith(string input) {
return ...[custom logic]...;
}

但由于这些是嵌套对象,因此我收到一条错误消息,提示 源参数中不存在名为“myObj2List.myObj3List.field1”的属性。 我一定是错误地表述了源。有什么帮助吗?

最佳答案

您正在尝试定义集合的映射。 MapStruct 不支持此功能。

使用时

@Mapping(source = "myObj2List.myObj3List.field1", target = "myObj5List.myObj6List.field1", qualifiedByName = "methodToMapWith")

您实际上是在告诉 MapStruct 您希望使用 myObj2List 中的属性 myObj3List。但是,myObject2List 不是一个 bean,而是一个集合。

您实际上是要告诉 MapStruct 将映射传递给为单个元素创建的可迭代映射。

我认为有一个功能请求支持类似的东西。

为了支持您的需要,您需要在不同对象之间添加映射方法。

例如

 @Mapping(source = "myObj2List", target = "myObj5List")
public MyObj4 field1Mapper(MyObj1 input);

@Mapping(source = "myObj3List", target = "myObj6List")
public MyObj5 map(MyObj2 input);

@Mapping(target = "field1", qualifiedByName = "methodToMapWith")
public MyObj6 map(MyObj3 input);

@Named("methodToMapWith")
public static int methodToMapWith(string input) {
return ...[custom logic]...;
}

targetsource 相同时,您不必定义它们,您可以只定义 targetqualifiedByName

关于java - Mapstruct:嵌套对象的自定义映射方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64648567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com