2

我有一个以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

4 回答 4

1

那是因为CrudRepository#findAll返回 anIterable而不是 a List。因此,您要么(1)更改方法签名以返回 an Iterable,要么 (2)将元素复制到 aList并返回它。

(1) 返回Iterable

public Iterable<PersonInfo> printPersonInfo() {
    return personRepo.findAll();
}

(2) 将元素复制到 aList并返回列表。

public List<PersonInfo> printPersonInfo() {
    List<PersonInfo> list = new ArrayList<>();
    personRepo.findAll().forEach(list::add);
    return list;
}
于 2018-10-26T16:12:08.103 回答
0
@Autowired
PersonInfoRepository personRepo;

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

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

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

    return people;
}

在这部分代码中,您没有初始化(强制转换更好)您的控制器变量

你可以很容易地使用List<PersonInfo>afterpeople =

于 2018-10-26T16:20:51.617 回答
0
public List<PersonInfo> printPersonInfo() {    
       List<PersonInfo> people = personRepo.findAll()
                                           .stream()
                                           .collect(Collectors.toList());
       System.out.println(people.toString());
       return people ;
}
于 2018-10-26T16:21:57.783 回答
0

使您的存储库扩展JpaRepository而不是CrudRepository

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

 }
于 2018-10-26T16:10:09.140 回答