Java mapstrcut-已停用的自动映射

Java mapstrcut-已停用的自动映射,java,mapstruct,Java,Mapstruct,我想使用特定映射将int映射到字符串,但MapsTRUCT总是使用string.valueOf自动将int转换为字符串,如何停用此自动映射 @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface SeanceMapper { @Mapping(target = "startHour", qualifiedByName = "toStartHour") Sean

我想使用特定映射将int映射到字符串,但MapsTRUCT总是使用
string.valueOf
自动将int转换为字符串,如何停用此自动映射

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface SeanceMapper {

  @Mapping(target = "startHour", qualifiedByName = "toStartHour")
  SeanceDTO seanceEntityToseanceDTO(SeanceEntity seanceEntity);

  @Named("toStartHour")
  default String toStartHour(SeanceEntity seanceEntity) {
    String startHour = Integer.toString(seanceEntity.getStartHour());
    if (startHour.length() == 3) {
        startHour = "0" + startHour;
    }
    return startHour.substring(0, 2) + "H:" + startHour.substring(2, startHour.length());
  }

}
SeanceMapperImpl

@Override
public SeanceDTO seanceEntityToseanceDTO(SeanceEntity seanceEntity) {
    if ( seanceEntity == null ) {
        return null;
    }

    SeanceDTO seanceDTO = new SeanceDTO();

    seanceDTO.setStartHour( String.valueOf( seanceEntity.getStartHour() ) );

    return seanceDTO;
}

在您的示例中,名称o映射方法不正确,因此mapStruct无法区分默认情况下使用“自动映射”字符串->整数映射的对象

@Mapping(target = "startHour", source = "startHour", qualifiedByName = "toEndHour")
SeanceDTO seanceEntityToseanceDTO(SeanceEntity seanceEntity);

@Named("toEndHour")
default String toEndHour(int startHour) {
    String startHour = Integer.toString(startHour);
    if (startHour.length() == 3) {
        startHour = "0" + startHour;
    }
    return startHour.substring(0, 2) + "H:" + startHour.substring(2, startHour.length());
}

public class SeanceEntity {

    private int startHour;

}

public class SeanceDTO {

    private String startHour;

}

我已经更正了注释
@Named
中的方法名称,这对于在
qualifiedByName
字段中按名称区分它很重要。同样在这种情况下,您必须指定要映射到目标的源字段,该字段适合
source
target
。如果有用,请告诉我:)

您确定需要源代码吗?当目标和源相同时,仅指定目标就足够了。此外,如果使用1.4,由于缺少qualifiedByName方法,您将出现编译错误。对不起,在我的代码中,映射方法的名称是正确的,仅当我复制粘贴时,我复制了不正确的方法,因为我有两个属性startHour和endDate。我更正了我的上述问题,并添加了impl。添加源代码时问题仍然存在。当我将版本从1.3升级到1.4时,工作正常。@Filip可能你是对的,我没有编译它。