SpringDataElasticSearch可以很好地保存数据,但返回带有findall的空数组

iqjalb3h  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(2)|浏览(527)

我已经使用springboot制作了一个应用程序,并在后台运行elasticsearch,一切正常,当我通过传递一些json数据来保存数据时,它会返回正确的结果(插入数据的数量),但当我尝试获取数据时,它会返回空数组符号。
不知道发生了什么事谁都能帮忙。
我已经附上了我的 Postman 要求的截图。
用于保存数据

用于获取数据

我的apiclass:-

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

}
r6l8ljro

r6l8ljro1#

您确定您的数据已保存在数据库中吗?您是否直接查询数据库并可以看到那里的数据?像我之前写的其他代码一样,您当前的代码只返回输入项的数量。不一定是保存的项目的实际数量。
好像是你的 findAllHeros 正在呼叫 repository.findAll(); (您从父仓库继承的)。但在存储库中,您创建了一个不同的方法: List<Hero> findByFirstname(String firstName); 只是打字错误吗?
另外,我希望控制器 findAllHeros 返回列表而不是 Iterable

b5lpy0ml

b5lpy0ml2#

我认为您的代码正在向elasticsearch添加json对象,但是数据没有保存。所以您需要将返回类型为list的数据保存为list,不要只返回size。

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

相关问题