Получить список из базы данных с помощью Spring Boot

У меня есть база данных с именем 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;
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
4 432
4

Ответы 4

сделайте свой репозиторий расширенным 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;
}

Спасибо, что было предложено первым ответом, и он работает ... большое спасибо

user10563989 26.10.2018 18:13
@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 ;
}

Другие вопросы по теме