java - 转换列表映射结构内的单个对象
问题描述
如何为以下场景进行响应映射 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<>();
}
我的枚举任务如下;
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
字段提供的方法具有返回类型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,会先实现to之间的映射TaskList
,TaskResponse
然后依次List<TaskList>
toList<TaskResponse>
推荐阅读
- android - 如何在画布上绘制可绘制对象?
- r - 设置 quantmod::chart_Series 的背景颜色
- regex - Angular 模式验证器未按预期工作
- java - 是否可以在位移位中仅移动一位?
- r - R创建共现矩阵
- node.js - 无法在 promise.all 中检索响应
- templates - 如何将模板输出写入 Golang 中的文件?
- java - CompletableFuture 在 forloop 中被创建和等待
- gradle - DefaultSourceDirectorySet 构造函数已被弃用。如何使用 ObjectFactory 服务?
- javascript - 如何使用 lodash 对嵌套数组进行排序