Получить список из базы данных с помощью Spring Boot - PullRequest
0 голосов
/ 26 октября 2018

У меня есть база данных с именем 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;
    }
}

Ответы [ 4 ]

0 голосов
/ 26 октября 2018
public List<PersonInfo> printPersonInfo() {    
       List<PersonInfo> people = personRepo.findAll()
                                           .stream()
                                           .collect(Collectors.toList());
       System.out.println(people.toString());
       return people ;
}
0 голосов
/ 26 октября 2018

Это потому, что 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;
}
0 голосов
/ 26 октября 2018
@Autowired
PersonInfoRepository personRepo;

@ResponseBody
@GetMapping("/people")
public List printPersonInfo() {

    List < PersonInfo > people = personRepo.findAll();

    System.out.println(people.toString());

    return people;
}

в этой части кода, которую вы не инициализировали (приведение лучше) вашей переменной контроллера

, вы можете легко привести ее к List<PersonInfo> после people =

0 голосов
/ 26 октября 2018

расширение вашего репозитория JpaRepository вместо CrudRepository

@Repository
public interface PersonInfoRepository extends JpaRepository < PersonInfo, Long > {

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...