2.3 KiB
2.3 KiB
Исправление NullPointerException в ReportGenerationService
Проблема
Ошибка: Cannot invoke "java.time.LocalDateTime.toLocalDate()" because "end" is null
Причина
В методах generate() и simpleGenerate() класса ReportGenerationService код пытался вызвать end.toLocalDate() без проверки на null, когда поле endDate в ReportGenerateRequest было null.
Исправления
1. Добавлены значения по умолчанию для дат
// Устанавливаем значения по умолчанию, если даты не указаны
if (start == null) {
start = LocalDateTime.now().minusDays(30); // 30 дней назад
}
if (end == null) {
end = LocalDateTime.now(); // сейчас
}
2. Исправлены вызовы format() в buildDocx и buildPdf
// Было:
req.getStartDate().format(dt), req.getEndDate().format(dt)
// Стало:
req.getStartDate() != null ? req.getStartDate().format(dt) : "не указано",
req.getEndDate() != null ? req.getEndDate().format(dt) : "не указано"
3. Упрощено создание имени файла
// Было:
String dateSuffix = end != null ? end.toLocalDate().toString() : "unknown_date";
// Стало:
String dateSuffix = end.toLocalDate().toString(); // end теперь всегда не null
Затронутые методы
generate(ReportGenerateRequest req)simpleGenerate(ReportGenerateRequest req)buildDocx(ReportGenerateRequest req, List<MarketItem> items, Sections sections)buildPdf(ReportGenerateRequest req, List<MarketItem> items, Sections sections)
Результат
- ✅ Устранена ошибка NullPointerException
- ✅ Добавлена обработка случаев, когда даты не указаны
- ✅ Установлены разумные значения по умолчанию (последние 30 дней)
- ✅ Сохранена обратная совместимость
Тестирование
После исправлений асинхронная генерация отчётов должна работать корректно даже при отсутствии дат в запросе.