在我的实体中,我保留一个fileName。在我的DTO中,我想要获取文件内容。 我尝试写一个映射:
@Configuration
public class FabricMapper {
public FabricMapper(ModelMapper modelMapper, Environment env) {
Condition<Fabric, FabricDTO> isFile = ctx -> ctx.getSource().getPictureFileName() != null;
modelMapper.createTypeMap(Fabric.class, FabricDTO.class).addMappings(mapper -> {
mapper.map(src -> src.getFabricMaterial().getId(), FabricDTO::setFabricMaterialId);
mapper.map(src -> src.getFabricType().getId(), FabricDTO::setFabricTypeId);
mapper.when(isFile).map(src -> {
String filePath = env.getProperty("images.path")
.concat("/")
.concat(String.valueOf(src.getOwner().getId()))
.concat(env.getProperty("image.fabric.path"))
.concat("/")
.concat(src.getPictureFileName())
.concat(env.getProperty("image.extention"));
File file = new File(filePath);
String imgB64 = "";
InputStream targetStream;
byte[] imageBytes;
try {
targetStream = new FileInputStream(file);
imageBytes = new byte[(int) file.length()];
targetStream.read(imageBytes, 0, imageBytes.length);
targetStream.close();
imgB64 = Base64.encodeBase64String(imageBytes);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return imgB64;
}, FabricDTO::setPicture);
});
}
}
第一个映射(FabricMaterial和FabricType)正在工作,但是当我尝试运行该应用程序时,第三个映射给了我NullPointerException,说src为null(显然)。
那么我认为我不应该这样写我的映射器,但是我找不到找到写它的方法。我已经阅读了ModelMapper文档,但对我来说却很不透明。
关于如何从映射器的文件路径中获取文件内容的任何建议?