Я пытаюсь загрузить файл JSON sample.json из каталога src/main/resources
.
Мне нужно сопоставить этот json-объект с Java-объектом. И мое приложение реактивное, я использую Spring webflux.
Я следил за блогом Саймона, чтобы придумать следующее:
SimpleModule module = new SimpleModule();
module.addDeserializer(OffsetDateTime.class, new JsonDeserializer<>() {
@Override
public OffsetDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
return OffsetDateTime.parse(p.getValueAsString());
}
});
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(module);
return Flux.using(() -> Files.lines(Paths.get(ClassLoader.getSystemResource("sample.json").toURI())),
Flux::fromStream,
BaseStream::close
)
.collectList()
.map(lines -> String.join("\n", lines))
.map(jsonContent -> {
try {
return objectMapper.readValue(jsonContent, MyPojo.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
})
.map(MyPojo::getValues());
Это нормально работает в локальном режиме, но не работает при запуске внутри контейнера докеров. (Я использую сборку gradle для создания файла jar, а затем создаю из него образ докера)
Часть трассировки стека ошибок:
java.nio.file.FileSystemNotFoundException: null в jdk.zipfs / jdk.nio.zipfs.ZipFileSystemProvider.getFileSystem (ZipFileSystemProvider.java:169) ~ [jdk.zipfs: na] Подавлено: Reaction.coreFilex