Я работаю с API Spring Boot, который получает объект Person. Чтобы сохранить объект Person в GridFS, я должен записать json в файл .txt, а затем передать этот файл в GridFS api для сохранения в базе данных Mon go. Я использую такой метод:
@PostMapping
public String save(@RequestBody Person person) throws IOException{
DBObject metaData = new BasicDBObject();
metaData.put("type", "data");
JSONObject json = new JSONObject(person);
writeInFile(json.toString());
File file = ResourceUtils.getFile("classpath:tmp/text.txt");
InputStream inputStream = new FileInputStream(file);
gridFsOperations.store(inputStream,"name.txt", metaData);
return "Stored successfully...";
}
Здесь я использую метод writeInFile для записи объекта Person json в файл .txt. Метод выглядит следующим образом:
private void writeInFile(String json) throws IOException{
File file = ResourceUtils.getFile("classpath:tmp/text.txt");
Files.write(Path.of(file.toURI()), json.getBytes());
}
Теперь я хочу иметь другой метод для извлечения текста объекта Person, который я сохранил в базе данных, чтобы преобразовать его в JSON и после что сопоставить его с объектом класса Person. У меня есть метод извлечения, подобный следующему:
@GetMapping
public String retrieve() throws IOException{
String json = "";
GridFSFile file = gridFsOperations.findOne(new Query(Criteria.where("metadata.type").is("data")));
GridFsResource resource = new GridFsResource(file);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8));
String currentLine;
while ((currentLine = bufferedReader.readLine()) != null){
json = json.concat(currentLine);
}
return json;
}
Я создаю буферизованную программу чтения для чтения содержимого файла внутри GridFS и добавляю результат в переменную json
. Проблема в том, что когда я вызываю метод retrieve, он ничего не возвращает. Переменная json
всегда пуста, потому что буферизованный считыватель пуст и не извлекает объект, который находится внутри базы данных. Я не знаю, если метод save ничего не сохраняет в базе данных или это проблема метода получения, который не получает правильно информацию. Как правильно сохранить или получить информацию?