Spring Data Elasticsearch отлично работает для сохранения данных, но возвращает пустой массив с findAll - PullRequest
0 голосов
/ 04 января 2019

Я сделал приложение, используя Springboot и запустив Elasticsearch в фоновом режиме, все работает нормально, и когда я сохраняю данные, передавая некоторые данные JSON, он возвращает правильный результат (количество вставленных данных), но когда я пытаюсь получить данные возвращают пустые символы массива.

Не может понять, что происходит, кто-нибудь может помочь.

И я приложил скриншоты моих запросов почтальона.

Для сохранения данных For Saving data

Для выборки данных For Fetching data

Мой класс API: -

@SpringBootApplication
@RestController
public class SpringBootElasticserachExampleApplication {

@Autowired
private HeroRepository repository;

@PostMapping("/saveHero")
public int saveCustomer(@RequestBody List<Hero> heros) {        

    repository.saveAll(heros);
    return heros.size();
}

@GetMapping("/findAll")
public Iterable<Hero> findAllHeros() {

    return repository.findAll();
}
}

Класс модели:

@Document(indexName="movie",type="hero",shards=2)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Hero {

@Id
private String id;
private String firstname;
private String lastname;
private int age;

}

Repository:

public interface HeroRepository extends ElasticsearchRepository<Hero, String>{

List<Hero> findByFirstname(String firstName);

}

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Я думаю, что ваш код добавляет объект JSON в ElasticSearch, но данные не сохраняются. Поэтому вам нужно сохранить данные с типом возврата в виде списка, а не возвращать только размер.

@PostMapping("/saveCustomer")
public List<Customer> saveCustomer(@RequestBody List<Customer> customers) {
  List<Customer> savedCustomer= repository.save(customers);
  //return customers.size();
  return savedCustomer;
}

В репозиторий напишите

List<Customer> save(List<Customer> customers);
Iterable<Customer> findAll();
0 голосов
/ 04 января 2019
  1. Вы уверены, что ваши данные сохранены в БД? Вы обращались к БД напрямую и видите там данные? Как и другие, написанные до меня, ваш текущий код просто возвращает количество элементов ввода. не обязательно реальное количество предметов, которые были сохранены.

  2. Похоже, ваш findAllHeros вызывает repository.findAll(); (который вы наследуете от родительской репозитой). Но в вашем хранилище вы создали другой метод: List<Hero> findByFirstname(String firstName); Это просто опечатка?

Кроме того, я ожидаю, что контроллер с findAllHeros вернет список, а не Iterable

...