Как получить текст из файла .txt в GridFS с помощью Spring Boot? - PullRequest
0 голосов
/ 29 января 2020

Я работаю с 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 ничего не сохраняет в базе данных или это проблема метода получения, который не получает правильно информацию. Как правильно сохранить или получить информацию?

...