У меня есть база данных с именем findall_db с одной таблицей с именем person ... Я вручную добавил некоторые значения в эту таблицу и хотел бы получить их с помощью Spring Boot. Это то, что у меня есть, но я продолжаю получать эту ошибку в моем контроллере: Type mismatch: cannot convert from Iterable<PersonInfo> to List<PersonInfo>
Класс сущности:
@Entity
@Table(name = "Person")
public class PersonInfo implements Serializable {
private static final long serialVersionUID = 1 L;
@Id
@SequenceGenerator(name = "PERSON_GENERATOR", sequenceName = "PERSON_SEQ")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PERSON_GENERATOR")
private Long id;
@Column(name = "ssn")
private String socialSecurityNumber;
private String name;
public PersonInfo() {}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getSocialSecurityNumber() {
return socialSecurityNumber;
}
public void setSocialSecurityNumber(String socialSecurityNumber) {
this.socialSecurityNumber = socialSecurityNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "PersonInfo [id = " + id + ", socialSecurityNumber = " + socialSecurityNumber + ", name = " + name + "]";
}
}
Класс репозитория:
@Repository
public interface PersonInfoRepository extends CrudRepository < PersonInfo, Long > {
}
Контроллер:
@Controller
public class PersonController {
@Autowired
PersonInfoRepository personRepo;
@ResponseBody
@GetMapping("/people")
public List printPersonInfo() {
List < PersonInfo > people = personRepo.findAll();
System.out.println(people.toString());
return people;
}
}




сделайте свой репозиторий расширенным JpaRepository вместо CrudRepository
@Repository
public interface PersonInfoRepository extends JpaRepository < PersonInfo, Long > {
}
Это потому, что CrudRepository#findAll возвращает Iterable, а не List. Итак, вы либо (1) изменяете подпись метода, чтобы также возвращать Iterable, либо (2) копируете элементы в List и возвращаете его.
(1) Вернуть Iterable:
public Iterable<PersonInfo> printPersonInfo() {
return personRepo.findAll();
}
(2) Скопируйте элементы в List и верните список.
public List<PersonInfo> printPersonInfo() {
List<PersonInfo> list = new ArrayList<>();
personRepo.findAll().forEach(list::add);
return list;
}
@Autowired
PersonInfoRepository personRepo;
@ResponseBody
@GetMapping("/people")
public List printPersonInfo() {
List < PersonInfo > people = personRepo.findAll();
System.out.println(people.toString());
return people;
}
в этой части кода вы не инициализировали (лучше кастомизировали) переменную вашего контроллера
вы можете легко использовать его с List<PersonInfo> после people =
public List<PersonInfo> printPersonInfo() {
List<PersonInfo> people = personRepo.findAll()
.stream()
.collect(Collectors.toList());
System.out.println(people.toString());
return people ;
}
Спасибо, что было предложено первым ответом, и он работает ... большое спасибо