在列表 mapstruct 中转换单个对象
Converting single object inside list mapsturct
如何为以下场景做响应映射 MapStruct
下面是我的模型;
@Getter
@Setter
public class TaskList {
private Long taskStatus;
}
我的回复如下;
@Getter
@Setter
public class TaskResponse {
private Long taskStatus;
}
我正在将响应 pojo 包装到下面的响应列表中;
public class AllTaskListResponse {
private List<TaskResponse> taskResponseList = new ArrayList<>();
}
下面是我的 enumTask;
public enum TaskStatusEnum {
Sth(1);
Sth(2);
private final long value;
TaskStatusEnum(long value) {
this.value = value;
}
public static TaskStatusEnum get(long value) {
for (TaskStatusEnum status : TaskStatusEnum.values()) {
if(status.value == value) {
return status;
}
}
return null;
}
}
下面是我的任务列表映射器;
@Named("taskStatusToString")
public static TaskStatusEnum taskStatusToString(long taskStatus) {
return TasStatusEnum.get(taskStatus);
}
@Mapping(source = "taskStatus", target = "taskStatus", qualifiedByName = "taskStatusToString")
public abstract List<TaskResponse> toAllTaskListResponse(List<TaskList> taskList);
所以当我尝试 运行 时,我收到了“未映射的目标 属性 结果”消息
谢谢
这是因为为 taskStatus
字段提供的映射方法具有 return 类型的 TaskStatusEnum
,但是,taskStatus
字段是 Long
来源和目标。
要么,像这样将目标字段类型转换为枚举:
@Getter
@Setter
public class TaskResponse {
private TaskStatusEnum taskStatus;
}
或者,删除 taskStatus
字段的映射:
public abstract List<TaskResponse> toAllTaskListResponse(List<TaskList> taskList);
此外,列表转换方法需要另一种将单个 TaskList
转换为 TaskResponse
的方法。如果需要,应该在那里应用 taskStatus
的映射。像这样:
@Mapping(source= "taskStatus", target = "taskStatus", qualifiedByName= "taskStatusToString")
public abstract TaskResponse toTaskResponse(TaskList taskList);
public abstract List<TaskResponse> toAllTaskListResponse(List<TaskList> taskList);
@Named("taskStatusToString")
public static TaskStatusEnum taskStatusToString(long taskStatus) {
return TasStatusEnum.get(taskStatus);
}
Mapstruct,会先实现TaskList
到TaskResponse
的映射,然后依次实现List<TaskList>
到List<TaskResponse>
的映射
如何为以下场景做响应映射 MapStruct
下面是我的模型;
@Getter
@Setter
public class TaskList {
private Long taskStatus;
}
我的回复如下;
@Getter
@Setter
public class TaskResponse {
private Long taskStatus;
}
我正在将响应 pojo 包装到下面的响应列表中;
public class AllTaskListResponse {
private List<TaskResponse> taskResponseList = new ArrayList<>();
}
下面是我的 enumTask;
public enum TaskStatusEnum {
Sth(1);
Sth(2);
private final long value;
TaskStatusEnum(long value) {
this.value = value;
}
public static TaskStatusEnum get(long value) {
for (TaskStatusEnum status : TaskStatusEnum.values()) {
if(status.value == value) {
return status;
}
}
return null;
}
}
下面是我的任务列表映射器;
@Named("taskStatusToString")
public static TaskStatusEnum taskStatusToString(long taskStatus) {
return TasStatusEnum.get(taskStatus);
}
@Mapping(source = "taskStatus", target = "taskStatus", qualifiedByName = "taskStatusToString")
public abstract List<TaskResponse> toAllTaskListResponse(List<TaskList> taskList);
所以当我尝试 运行 时,我收到了“未映射的目标 属性 结果”消息
谢谢
这是因为为 taskStatus
字段提供的映射方法具有 return 类型的 TaskStatusEnum
,但是,taskStatus
字段是 Long
来源和目标。
要么,像这样将目标字段类型转换为枚举:
@Getter
@Setter
public class TaskResponse {
private TaskStatusEnum taskStatus;
}
或者,删除 taskStatus
字段的映射:
public abstract List<TaskResponse> toAllTaskListResponse(List<TaskList> taskList);
此外,列表转换方法需要另一种将单个 TaskList
转换为 TaskResponse
的方法。如果需要,应该在那里应用 taskStatus
的映射。像这样:
@Mapping(source= "taskStatus", target = "taskStatus", qualifiedByName= "taskStatusToString")
public abstract TaskResponse toTaskResponse(TaskList taskList);
public abstract List<TaskResponse> toAllTaskListResponse(List<TaskList> taskList);
@Named("taskStatusToString")
public static TaskStatusEnum taskStatusToString(long taskStatus) {
return TasStatusEnum.get(taskStatus);
}
Mapstruct,会先实现TaskList
到TaskResponse
的映射,然后依次实现List<TaskList>
到List<TaskResponse>