我有一个名为InstanceTask
的实体,它有一个名为TaskStatusEnum status
的Enum
字段,还有一个名为String status
的String
字段的DTO InstanceTaskDto
下面是TaskStatusEnum
:
@AllArgsConstructor
@Getter
public enum TaskStatusEnum {
ACTIVE("En cours."),
DONE("Traitée"),
TO_DO("A faire");
private final String value;
}
字符串
我尝试使用mapstructMap器从InstanceTaskDto.status
Map到InstanceTask.status
:
@Mappings({
@Mapping(target = "status" , source = "status", qualifiedByName = "getTaskInstanceStatusEnum"),
})
InstanceTask toEntity (InstanceTaskDto instanceTaskDto);
@Mappings({
@Mapping(target = "status", source = ".", qualifiedByName = "getInstanceTaskStatus"),
})
InstanceTaskDto toDto (InstanceTask instanceTask);
@Named("getInstanceTaskStatus")
default String getInstanceTaskStatus(InstanceTask instanceTask)
{
if(instanceTask.getStatus() == null)
return null;
return instanceTask.getStatus().getValue();
}
@Named("getTaskInstanceStatusEnum")
default Enum<TaskStatusEnum> getTaskInstanceStatusEnum(InstanceTaskDto instanceTaskDto)
{
if(instanceTaskDto.getStatus() == null)
return null;
TaskStatusEnum statusEnum = TaskStatusEnum.TO_DO;
for (TaskStatusEnum status : TaskStatusEnum.values()) {
if (status.getValue().equals(instanceTaskDto.getStatus())) {
statusEnum = status;
}
}
return statusEnum;
}
型
我遇到的问题是,在生成的InstanceTaskMapperImpl
中,getTaskInstanceStatusEnum
没有被调用,而是toEntity
的status
字段的实现:
@Override
public InstanceTask toEntity(InstanceTaskDto instanceTaskDto)
{
if ( instanceTaskDto == null ) {
return null;
}
InstanceTask instanceTask = new InstanceTask();
if ( instanceTaskDto.getStatus() != null ) {
instanceTask.setStatus( Enum.valueOf( TaskStatusEnum.class, instanceTaskDto.getStatus() ) );
}
// other stuff //
return instanceTask ;
}
型
在toDTO上,我的自定义方法被正确调用:
@Override
public InstanceTaskDto toDto(InstanceTask instanceTask) {
if ( instanceTask == null ) {
return null;
}
InstanceTaskDtoBuilder instanceTaskDto = InstanceTaskDto.builder();
instanceTaskDto.status( getInstanceTaskStatus( instanceTask ) );
// other stuff //
return instanceTaskDto ;
}
型
要使toEntity
实现使用我的getTaskInstanceStatusEnum
而不是上面显示的默认实现,我必须做些什么?
- 谢谢-谢谢
1条答案
按热度按时间cwtwac6a1#
将
default Enum<TaskStatusEnum>...
更改为default TaskStatusEnum...