У меня есть сущность Предметов, состоящая из размеров предмета, как показано во фрагменте ниже. Я хочу прочитать все эти поля из файла CSV, проверить его и сохранить в соответствующей таблице в базе данных? файл может содержать от сотен до тысяч элементов.
@Document(collection = "items")
public class ItemEntity {
@Id
private String id;
private double height;
private double width;
private double length;
private double weight;
}
пользователь должен будет загрузить один CSV-файл через пользовательский интерфейс и отправить запрос POST с телом, содержащим содержимое файла.
Я определил MongoRepository для доступа к базе данных:
@Repository
public interface ItemRepository extends MongoRepository<Item, String> {
}
, затем для десериализации CSV, я мог бы, вероятно, использовать Джексона и добавить расширение формата данных для CSV? ( если у кого-то есть пример того, как это сделать, это было бы здорово? )
compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-csv', version: '2.5.3'
сначала мне нужно выяснить вспомогательный метод, который знает, как читать CSV для заданный класс POJO ( Нужна помощь Здесь )? затем создайте Rest Controller для обработки загрузки:
@PostMapping(value = "/upload", consumes = "text/csv")
public void uploadFile(@RequestBody InputStream body) {
repository.saveAll(CsvUtility.read(Item.class, body));
}
Для части проверки я хочу проверить случай, когда элементы не имеют размеров (высота, ширина, длина, вес пусты )
Для этого я хочу проверить данные сразу же после загрузки файла, затем вызвать исключение, если данные отсутствуют, сообщить пользователю . На мой взгляд, для достижения этого наилучшим подходом будет уровень обслуживания, который довольно прост в реализации.
@Service
@Validated
@RequiredArgsConstructor
class ItemService {
private final ItemRepository repository;
public void saveAll(@Valid List<Item> items) {
repository.saveAll(items);
}
}
Мне все еще неясно, является ли это лучшим подходом? Кроме того, я хотел бы иметь несколько примеров того, как проверить данные (как описано выше), прочитать и сохранить CSV-файл в документе (таблице) в MongoDB?
NB Я довольно новичок в этом стеке, так я учусь, делая и исследуя?
спасибо