Объект (POJO) становится нулевым с помощью расширения Spring Batch Excel
Я использую Spring Batch Excel Extension
читать Excel (.xlx)
файл. Я клонировал источник и сделал mvn install
и добавил зависимость в мой проект Spring Boot. Я также добавил Apache poi-ooxml
,
Мой файл Excel содержит простые данные:
Id Last Name First Name
3 Aguinaldo Emilio
4 Aquino Melchora
5 Dagohoy Francisco
6 Luna Antonio
7 Jacinto Emilio
Это мое Student
учебный класс:
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotBlank(message = "{NotBlank.student.lastName}")
private String lastName;
@NotBlank(message = "{NotBlank.student.firstName}")
private String firstName;
private LocalDateTime createdAt;
// getters, setters
}
Я создал служебный класс, метод которого выполняет фактическое чтение файла Excel:
public class ExcelUtils {
public static <T> ItemReader<T> excelToItemReader(Path file, Class<T> clazz) throws Exception {
PoiItemReader<T> reader = new PoiItemReader<>();
reader.setLinesToSkip(1);
System.out.println("File Name: " + file.toString()); // Displays: File Name: uploads\excel\<Excel file selected to import>
Resource resource = new FileSystemResource(file);
System.out.println("File exists? " + resource.exists()); // Displays: File exists? true
reader.setResource(resource);
reader.setRowMapper(excelRowMapper(clazz));
return reader;
}
private static <T> RowMapper<T> excelRowMapper(Class<T> clazz) {
BeanWrapperRowMapper<T> rowMapper = new BeanWrapperRowMapper<>();
rowMapper.setTargetType(clazz);
return rowMapper;
}
}
После загрузки файлов я бы выбрал файл для импорта его данных в свою базу данных:
@PostMapping("/import")
public String importStudents(@RequestParam String fileName, RedirectAttributes redirectAttributes) throws Exception {
ItemReader<Student> studentItemReader = ExcelUtils.excelToItemReader(storageService.load(fileName), Student.class);
Student student = studentItemReader.read();
if (student != null) {
System.out.println("Student has data.");
studentService.save(student);
} else {
System.out.println("Student is null");
throw new Exception("Student is null");
}
redirectAttributes.addFlashAttribute("message", "You successfully imported students data from " + fileName + "!");
return "redirect:/students";
}
Я не понимаю почему student
становится null
когда нет ошибок при входе в консоль вообще.