Spring Data Elasticsearch可以很好地保存数据,但是使用findAll返回空数组

时间:2019-01-04 12:54:13

标签: java elasticsearch spring-data-elasticsearch

我使用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;

}

存储库:

public interface HeroRepository extends ElasticsearchRepository<Hero, String>{

List<Hero> findByFirstname(String firstName);

}

2 个答案:

答案 0 :(得分:0)

  1. 您确定您的数据已保存在数据库中吗?您是否直接查询了数据库并可以在那里查看数据?就像其他在我之前写的一样,您当前的代码仅返回输入项的数量。不一定是所保存项目的实际数量。

  2. 似乎您的findAllHeros正在调用repository.findAll();(您从父存储库继承)。但是在您的存储库中,您创建了一个不同的方法: List<Hero> findByFirstname(String firstName);只是一个错字?

此外,我希望带有findAllHeros的Controller返回一个列表,而不返回Iterable

答案 1 :(得分:0)

我认为您的代码将JSON对象添加到ElasticSearch,但未保存数据。因此,您需要将返回类型为List的数据保存,而不仅仅是返回大小。

@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();