我使用Springboot制作了一个应用程序,并在后台运行Elasticsearch,一切正常,当我通过传递一些json数据保存数据时,它返回正确的结果(插入数据的数量),但是当我尝试获取时数据返回空数组符号。
不了解发生了什么事,请有人帮忙。
我已经附上了我的邮递员请求的屏幕截图。
用于保存数据
用于获取数据
我的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);
}
答案 0 :(得分:0)
您确定您的数据已保存在数据库中吗?您是否直接查询了数据库并可以在那里查看数据?就像其他在我之前写的一样,您当前的代码仅返回输入项的数量。不一定是所保存项目的实际数量。
似乎您的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();