Java mapstrcut-已停用的自动映射
我想使用特定映射将int映射到字符串,但MapsTRUCT总是使用Java mapstrcut-已停用的自动映射,java,mapstruct,Java,Mapstruct,我想使用特定映射将int映射到字符串,但MapsTRUCT总是使用string.valueOf自动将int转换为字符串,如何停用此自动映射 @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface SeanceMapper { @Mapping(target = "startHour", qualifiedByName = "toStartHour") Sean
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可能你是对的,我没有编译它。