【问题标题】:OpenCsv CsvToBeanBuilder not build beanOpenCsv CsvToBeanBuilder 不构建 bean
【发布时间】:2021-01-08 15:19:44
【问题描述】:

我在使用 OpenCsv 时遇到问题,我使用 POST API 将 csv 加载到我的 Web 服务,但如果我尝试使用 CsvToBeanBuilder 将 csv 转换为 bean,结果 bean 的所有字段都为空值

这是 API 代码

public Mono<Map<String, Object>> insertPointOfInterest(@RequestAttribute(name="municipalityId", required = true) Long municipalityId,
                                                           @RequestPart("file") FilePart file, @RequestParam Optional<String> languages) throws IOException{
        Map<String, Object> result = new HashMap<String, Object>();
        List<Map<String, Object>> errors = new ArrayList<Map<String, Object>>();
        Path tempFile = Files.createTempFile("test", file.filename());

        AsynchronousFileChannel channel = AsynchronousFileChannel.open(tempFile, StandardOpenOption.WRITE);
        DataBufferUtils.write(file.content(), channel, 0)
                .subscribe();

        String extension = FilenameUtils.getExtension(file.filename());

        if (!extension.equals("csv")) {
            result.put("success", false);
            result.put("error", "File non in formato csv");
            return Mono.just(result).log();
        }


        try (Reader reader = new BufferedReader(new InputStreamReader(new FileInputStream(tempFile.toFile())))) {

            CsvToBean<PointOfInterestCsv> csvToBean = new CsvToBeanBuilder(reader)
                    .withType(PointOfInterestCsv.class)
                    .withIgnoreLeadingWhiteSpace(true)
                    .build();

            List<PointOfInterestCsv> poiCsv = csvToBean.parse();

            extracted(municipalityId, errors, poiCsv, getFirstLanguage(languages).orElse(defaultLanguage));

        } catch (Exception ex) {
            result.put("success", false);
            result.put("error", ex);
            return Mono.just(result).log();
        } finally {
            Files.deleteIfExists(tempFile);
        }
        result.put("success", true);
        result.put("error", errors);
        return Mono.just(result).log();
    }

这是我的豆子

public class PointOfInterestCsv implements Serializable{

    @CsvBindByName(column = "IDENTIFICATIVO")
    String identificativo;
    @CsvBindByName(column = "TITOLO")
    String titolo;
    @CsvBindByName(column = "DESCRIZIONE")
    String descrizione;
    @CsvBindByName(column = "INDIRIZZO")
    String indirizzo;
    @CsvBindByName(column = "CATEGORIA")
    String categoria;
    @CsvBindByName(column = "FILTRO_TERRITORIALE")
    String filtro_territoriale;
    @CsvBindByName(column = "TARGET")
    String target;
    @CsvBindByName(column = "TAG")
    String tag;
    @CsvBindByName(column = "POI")
    String poi;
    @CsvBindByName(column = "TIPO_STRUTTURA")
    String tipo_struttura;
    @CsvBindByName(column = "STELLE")
    String stelle;
    @CsvBindByName(column = "PREZZO")
    String prezzo;
    @CsvBindByName(column = "PAGAMENTO")
    String pagamento;
    @CsvBindByName(column = "TRATTAMENTI")
    String trattamenti;
    @CsvBindByName(column = "SERVIZI")
    String servizi;
    @CsvBindByName(column = "TIPO_CUCINA")
    String tipo_cucina;
    @CsvBindByName(column = "ACCESSIBILITA")
    String accessibilita;
    @CsvBindByName(column = "TIPO_ESPERIENZE")
    String tipo_esperienze;
    @CsvBindByName(column = "DURATA")
    String durata;
    @CsvBindByName(column = "TIPOLOGIA_ESPERIENZE")
    String tipologia_esperienze;
    @CsvBindByName(column = "TIPO_EVENTO")
    String tipo_evento;
    @CsvBindByName(column = "IMMAGINI")
    String immagini;
    @CsvBindByName(column = "LATITUDINE")
    String latitudine;
    @CsvBindByName(column = "LONGITUDINE")
    String longitudine;
    @CsvBindByName(column = "TELEFONO")
    String telefono;
    @CsvBindByName(column = "FAX")
    String fax;
    @CsvBindByName(column = "MAIL")
    String mail;
    @CsvBindByName(column = "SITO_WEB")
    String sito_web;
    @CsvBindByName(column = "MAIL_2")
    String mail_2;
    @CsvBindByName(column = "TRIPADVISOR_LINK")
    String tripAdvisor_link;
    @CsvBindByName(column = "FACEBOOK_LINK")
    String facebook_link;
    @CsvBindByName(column = "INSTAGRAM_LINK")
    String instagram_link;
    @CsvBindByName(column = "TWITTER_LINK")
    String twitter_link;
    @CsvBindByName(column = "YOUTUBE_LINK")
    String youtube_link;
    @CsvBindByName(column = "ORARI_DI_APERTURA")
    String orari_di_apertura;

    public String getIdentificativo(){
        return identificativo;
    }

    public void setIdentificativo(String identificativo){
        this.identificativo = identificativo;
    }

    public String getTitolo(){
        return titolo;
    }

    public void setTitolo(String titolo){
        this.titolo = titolo;
    }

    public String getDescrizione(){
        return descrizione;
    }

    public void setDescrizione(String descrizione){
        this.descrizione = descrizione;
    }

    public String getIndirizzo(){
        return indirizzo;
    }

    public void setIndirizzo(String indirizzo){
        this.indirizzo = indirizzo;
    }

    public String getCategoria(){
        return categoria;
    }

    public void setCategoria(String categoria){
        this.categoria = categoria;
    }

    public String getFiltro_territoriale(){
        return filtro_territoriale;
    }

    public void setFiltro_territoriale(String filtro_territoriale){
        this.filtro_territoriale = filtro_territoriale;
    }

    public String getTarget(){
        return target;
    }

    public void setTarget(String target){
        this.target = target;
    }

    public String getTag(){
        return tag;
    }

    public void setTag(String tag){
        this.tag = tag;
    }

    public String getPoi(){
        return poi;
    }

    public void setPoi(String poi){
        this.poi = poi;
    }

    public String getTipo_struttura(){
        return tipo_struttura;
    }

    public void setTipo_struttura(String tipo_struttura){
        this.tipo_struttura = tipo_struttura;
    }

    public String getStelle(){
        return stelle;
    }

    public void setStelle(String stelle){
        this.stelle = stelle;
    }

    public String getPrezzo(){
        return prezzo;
    }

    public void setPrezzo(String prezzo){
        this.prezzo = prezzo;
    }

    public String getPagamento(){
        return pagamento;
    }

    public void setPagamento(String pagamento){
        this.pagamento = pagamento;
    }

    public String getTrattamenti(){
        return trattamenti;
    }

    public void setTrattamenti(String trattamenti){
        this.trattamenti = trattamenti;
    }

    public String getServizi(){
        return servizi;
    }

    public void setServizi(String servizi){
        this.servizi = servizi;
    }

    public String getTipo_cucina(){
        return tipo_cucina;
    }

    public void setTipo_cucina(String tipo_cucina){
        this.tipo_cucina = tipo_cucina;
    }

    public String getAccessibilita(){
        return accessibilita;
    }

    public void setAccessibilita(String accessibilita){
        this.accessibilita = accessibilita;
    }

    public String getTipo_esperienze(){
        return tipo_esperienze;
    }

    public void setTipo_esperienze(String tipo_esperienze){
        this.tipo_esperienze = tipo_esperienze;
    }

    public String getDurata(){
        return durata;
    }

    public void setDurata(String durata){
        this.durata = durata;
    }

    public String getTipologia_esperienze(){
        return tipologia_esperienze;
    }

    public void setTipologia_esperienze(String tipologia_esperienze){
        this.tipologia_esperienze = tipologia_esperienze;
    }

    public String getImmagini(){
        return immagini;
    }

    public void setImmagini(String immagini){
        this.immagini = immagini;
    }

    public String getLatitudine(){
        return latitudine;
    }

    public void setLatitudine(String latitudine){
        this.latitudine = latitudine;
    }

    public String getLongitudine(){
        return longitudine;
    }

    public void setLongitudine(String longitudine){
        this.longitudine = longitudine;
    }

    public String getTelefono(){
        return telefono;
    }

    public void setTelefono(String telefono){
        this.telefono = telefono;
    }

    public String getFax(){
        return fax;
    }

    public void setFax(String fax){
        this.fax = fax;
    }

    public String getMail(){
        return mail;
    }

    public void setMail(String mail){
        this.mail = mail;
    }

    public String getSito_web(){
        return sito_web;
    }

    public void setSito_web(String sito_web){
        this.sito_web = sito_web;
    }

    public String getMail_2(){
        return mail_2;
    }

    public void setMail_2(String mail_2){
        this.mail_2 = mail_2;
    }

    public String getTripAdvisor_link(){
        return tripAdvisor_link;
    }

    public void setTripAdvisor_link(String tripAdvisor_link){
        this.tripAdvisor_link = tripAdvisor_link;
    }

    public String getFacebook_link(){
        return facebook_link;
    }

    public void setFacebook_link(String facebook_link){
        this.facebook_link = facebook_link;
    }

    public String getInstagram_link(){
        return instagram_link;
    }

    public void setInstagram_link(String instagram_link){
        this.instagram_link = instagram_link;
    }

    public String getTwitter_link(){
        return twitter_link;
    }

    public void setTwitter_link(String twitter_link){
        this.twitter_link = twitter_link;
    }

    public String getYoutube_link(){
        return youtube_link;
    }

    public void setYoutube_link(String youtube_link){
        this.youtube_link = youtube_link;
    }

    public String getOrari_di_apertura(){
        return orari_di_apertura;
    }

    public void setOrari_di_apertura(String orari_di_apertura){
        this.orari_di_apertura = orari_di_apertura;
    }

    public String getTipo_evento(){
        return tipo_evento;
    }

    public void setTipo_evento(String tipo_evento){
        this.tipo_evento = tipo_evento;
    }
}

我会尝试上传这个 csv 文件

IDENTIFICATIVO;TITOLO;DESCRIZIONE;INDIRIZZO;CATEGORIA;FILTRO_TERRITORIALE;TARGET;TAG;POI;TIPO_STRUTTURA;STELLE;PREZZO;PAGAMENTO;TRATTAMENTI;SERVIZI;TIPO_CUCINA;ACCESSIBILITA;TIPO_ESPERIENZE;DURATA;TIPOLOGIA_ESPERIENZE;TIPO_EVENTO;IMMAGINI;LATITUDINE;LONGITUDINE;TELEFONO;FAX;MAIL;SITO WEB;MAIL 2;TRIPADVISOR LINK;FACEBOOK LINK;INSTAGRAM LINK;TWITTER LINK;YOUTUBE LINK;ORARI DI APERTURA
1;;Evento prova;via xxx;Eventi;Comune;Altro;Spettacoli/Eventi;altro INT. TUR;;;Prezzo economico ;;;;;Disabili;;2h;;Concerti;;10.12;11.45;123;21;prova@prova.it;https://www.google.com;;;;;;;;

这是解析后的结果

我还尝试在 csv 中只发送一个字段(显然是修改 bean)并修改与字段“identificativo”、“latitudine”和“longitudine”相关的数据类型,分别将它们设置为 Integer 和双倍,但结果不变

【问题讨论】:

    标签: java csv opencsv


    【解决方案1】:

    我遇到了同样的问题,就这样解决了:

    从此更改阅读器类型:

    new InputStreamReader(new FileInputStream(tempFile.toFile())))
    

    到这里:

    Reader targetReader = new InputStreamReader(inputStream);
    CSVReader reader = new CSVReader(targetReader);
    

    所以,我认为,在您的情况下,您必须将文件转换为 InputStream 并使用 CSVReader 而不是 InputStreamReader

    【讨论】:

      猜你喜欢
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多