Spring Boot 读取 CSV 并更新数据库表

问题描述 投票:0回答:0

我创建了一个 REST API POST 以读取文件 csv 并以这种方式更新我的 postgres 表:

@Override
public void insertDataFromCSV(CsvDataInputBean csvDataInputBean)
        throws IllegalStateException, FileNotFoundException {

    String path = csvDataInputBean.getPath();
    log.info("INPUT PATH ", csvDataInputBean.getPath().toString());

    List<CsvPojo> csvFile = new CsvToBeanBuilder<CsvPojo>(new FileReader(path)).withType(CsvPojo.class).build()
            .parse();

    UserEntity userEntity = new UserEntity();

    for (CsvPojo csv : csvFile) {
        log.info("CSV User Name: ", csv.getName());
        log.info("CSV User Surname: ", csv.getSurname());
        log.info("CSV User Gender: ", csv.getGender());
        log.info("CSV User Age: ", csv.getAge());
        log.info("CSV User CF: ", csv.getCf());
        log.info("CSV User Mail: ", csv.getMail());
        log.info("CSV User Address: ", csv.getAddress());

        userEntity.setId(csv.getId());
        userEntity.setName(csv.getName());
        userEntity.setSurname(csv.getSurname());
        userEntity.setGender(csv.getGender());
        userEntity.setAge(csv.getAge());
        userEntity.setCf(csv.getCf());
        userEntity.setMail(csv.getMail());
        userEntity.setAddress(csv.getAddress());
        userRepository.save(userEntity);
        userRepository.flush();
        log.info("Saved the Record: ", csv.getId());
    }

}

但是当我尝试在 Postman 上进行测试时,我得到了这个错误:

我没有看到带有字段值的日志:

2023-05-02 19:31:55.941  INFO 19836 --- [nio-8080-exec-1] c.u.u.service.impl.UserServiceImpl       : CSV User Name: 
2023-05-02 19:31:55.941  INFO 19836 --- [nio-8080-exec-1] c.u.u.service.impl.UserServiceImpl       : CSV User Surname: 
2023-05-02 19:31:55.941  INFO 19836 --- [nio-8080-exec-1] c.u.u.service.impl.UserServiceImpl       : CSV User Gender: 
2023-05-02 19:31:55.942  INFO 19836 --- [nio-8080-exec-1] c.u.u.service.impl.UserServiceImpl       : CSV User Age: 
2023-05-02 19:31:55.942  INFO 19836 --- [nio-8080-exec-1] c.u.u.service.impl.UserServiceImpl       : CSV User CF: 
2023-05-02 19:31:55.942  INFO 19836 --- [nio-8080-exec-1] c.u.u.service.impl.UserServiceImpl       : CSV User Mail: 
2023-05-02 19:31:55.942  INFO 19836 --- [nio-8080-exec-1] c.u.u.service.impl.UserServiceImpl       : CSV User Address: 
2023-05-02 19:31:56.043  INFO 19836 --- [nio-8080-exec-1] c.u.u.service.impl.UserServiceImpl       : Saved the Record: 

保存到数据库不正确,它有错位。特别是,它不设置姓名,而是设置姓名而不是姓氏。

CSV 文件具有以下值: 身份证、姓名、姓氏、性别、年龄、Cf、邮件、地址 15,Pablo,Escobar,男,52,PBLESC65T85P456H,[email protected],Via Medein 27

但在数据库中我看到:

UserEntity 和 CSVPojo 是:

@Entity
@Table(name = "mt_user")
public class UserEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private Integer id;

    @Column(name = "name")
    private String name;

    @Column(name = "surname")
    private String surname;

    @Column(name = "gender")
    private String gender;

    @Column(name = "age")
    private int age;

    @Column(name = "cf")
    private String cf;

    @Column(name = "mail")
    private String mail;

    @Column(name = "address")
    private String address;

public class CsvPojo {

    @CsvBindByName(column = "id")
    private Integer id;

    @CsvBindByName(column = "name")
    private String name;

    @CsvBindByName(column = "name")
    private String surname;

    @CsvBindByName(column = "gender")
    private String gender;

    @CsvBindByName(column = "age")
    private int age;

    @CsvBindByName(column = "cf")
    private String cf;

    @CsvBindByName(column = "mail")
    private String mail;

    @CsvBindByName(column = "address")
    private String address;

我怎么解决它?

spring-boot csv save filereader
© www.soinside.com 2019 - 2024. All rights reserved.