Я использую Джексона [1] для прямой десериализации файла json.
Концептуально это выглядит следующим образом:
ObjectMapper objectMapper = new ObjectMapper();
ObjectReader objectReader = objectMapper.readerFor(DirectionsResponse.class);
DirectionsResponse result = objectReader.readValue(jsonString);
Это хорошо работает в локально запущенном приложении Spring-Boot, но не работает при запуске приложения в качестве развернутой WAR на Heroku. На Heroku я получаю следующее исключение: com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input
.
По какой-то причине - так кажется - jsonString
не остается полностью доступным при запуске на Heroku, что странно, потому что оно полностью читается перед его передачей на objectReader
.
Мысль о том, как изолировать проблему, будет высоко оценена.
jsonString читается из InputStream следующим образом:
InputStream is = DirectionsResponse.class.getClassLoader().getResourceAsStream(resourceName);
// which is used to...
private static String readFromInputStream(InputStream inputStream) throws IOException
{
StringBuilder resultStringBuilder = new StringBuilder();
try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)))
{
String line;
while ((line = br.readLine()) != null)
{
resultStringBuilder.append(line).append("\n");
}
}
return resultStringBuilder.toString();
}
[1] - com.faster xml .jackson.core: jackson-databind: jar: 2.10.0