最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何解決EasyExcel導(dǎo)出文件LocalDateTime報(bào)錯(cuò)問題

 更新時(shí)間:2023年06月09日 09:43:30   作者:陳寶子  
這篇文章主要介紹了如何解決EasyExcel導(dǎo)出文件LocalDateTime報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

解決EasyExcel導(dǎo)出文件LocalDateTime報(bào)錯(cuò)

問題引出

我在參與一個(gè)項(xiàng)目的時(shí)候接觸到數(shù)據(jù)表格導(dǎo)出為Excel表格的需求,但是在導(dǎo)出的時(shí)候會(huì)出現(xiàn)報(bào)錯(cuò)

Cannot find ‘Converter’ support class LocalDateTime

原因是我需要導(dǎo)出的實(shí)體類中存在 LocalDateTime 類型的屬性,而又恰巧 EasyExcel 不支持 LocalDate 和 LocalDateTime 接收數(shù)據(jù),啊人生。

解決方案

在尋找了多篇文章之后,在下面對(duì)這個(gè)問題進(jìn)行總結(jié),既然默認(rèn)不支持我使用這個(gè)類型,那就殺出一條路來。

首先先來看報(bào)的錯(cuò)誤提示:

Cannot find ‘Converter’ support class LocalDateTime

明顯可以看出來是找不到 LocalDateTime 的一個(gè) Converter,那么這個(gè)所謂的 Converter 到底是個(gè)什么東西呢?既然他缺少這個(gè)東西我們能不能給他自己弄一個(gè)上去呢?說干就干!(其實(shí)解決方法也真就是這個(gè))

自定義Converter

Converter 在這里其實(shí)是一個(gè)字段轉(zhuǎn)換器,在 EasyExcel 中擔(dān)任將Java屬性轉(zhuǎn)換成Excel表格中合法數(shù)據(jù)的一個(gè)小東西。

由于EasyExcel自己沒有我們需要的 LocalDateTime 的字段轉(zhuǎn)換器,那我們就自己搞一個(gè)出來。

在 config 包下新建一個(gè)自定義的字段轉(zhuǎn)換器 LocalDateTimeConverter 。

package edu.lingnan.rili.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
 * @author xBaozi
 * @version 1.0
 * @classname LocalDateTimeConverter
 * @description EasyExcel LocalDateTime轉(zhuǎn)換器
 * @date 2022/3/19 2:17
 */
public class LocalDateTimeConverter implements Converter<LocalDateTime> {
    private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";
    @Override
    public Class<LocalDateTime> supportJavaTypeKey() {
        return LocalDateTime.class;
    }
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }
    @Override
    public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
                                           GlobalConfiguration globalConfiguration) {
        return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern(DEFAULT_PATTERN));
    }
    @Override
    public CellData<String> convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty,
                                               GlobalConfiguration globalConfiguration) {
        return new CellData<>(value.format(DateTimeFormatter.ofPattern(DEFAULT_PATTERN)));
    }
}

引用 LocalDateTimeConverter

既然這東西是本來沒有然后我們自己弄出來的,那肯定要告訴程序:**誒!這里我給你生了個(gè)崽,要記得領(lǐng)回去??!**所以,我們?cè)谠拘枰獙?dǎo)出的 LocalDateTime 類型中的 @ExcelProperty 注解中引入自定義的字段轉(zhuǎn)換器。

同時(shí)要加上一個(gè)JsonFormat的格式化注解,將該屬性轉(zhuǎn)換成 json格式,這里要注意的就是要導(dǎo)入一下阿里巴巴的 fastjson Maven坐標(biāo)了。

@ExcelProperty(value = "操作時(shí)間", index = 8, converter = LocalDateTimeConverter.class)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("操作時(shí)間")
private LocalDateTime operationTime;
<!-- fastjson的Maven坐標(biāo) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.73</version>
</dependency>

好啦!到這里我們遇到的問題就已經(jīng)解決了呀!雖然說前期剛遇到這個(gè)問題的時(shí)候一直在被折磨,但是卻是一個(gè)很好的一個(gè)提升機(jī)會(huì),沒點(diǎn)兒bug,怎么能保得住頭發(fā)呢是吧。

EasyExcel導(dǎo)出問題

報(bào)錯(cuò)信息?。?!

錯(cuò)誤一:

com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: Could not initialize class net.sf.cglib.beans.BeanMap$Generator

com.alibaba.excel.exception.ExcelAnalysisException: java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter overrides final method visit.(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V

上面兩種報(bào)錯(cuò)?。。《际且粋€(gè)原因,各種查詢之后,說是版本沖突,這種就很頭疼

經(jīng)過排查,我在pom中將單元測(cè)試的依賴注解之后,導(dǎo)入就正常了

錯(cuò)誤二:

com.alibaba.excel.exception.ExcelDataConvertException: Can not find 'Converter' support

原因:默認(rèn)只能轉(zhuǎn)換BigDecimal、Bolean、Byte[]、btye[]、Byte、Date、Double、File、Float、InputStream、Integer、Long、Short、URL幾種類型,== 所以必須自己手動(dòng)編寫一個(gè)轉(zhuǎn)換類==

我原本得實(shí)體類:用的數(shù)據(jù)類型是:LocalDateTime,不能自動(dòng)轉(zhuǎn)換

修改后:自己編輯了一個(gè)轉(zhuǎn)換類LocalDateConverter

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ExcelProperty(value="時(shí)間",index = 10,converter = LocalDateConverter.class)
    @ColumnWidth(25)
    private LocalDateTime turnoutTime;

LocalDateConverter

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class LocalDateConverter implements Converter<LocalDateTime> {
    @Override
    public Class<LocalDateTime> supportJavaTypeKey() {
        return LocalDateTime.class;
    }
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }
    @Override
    public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
    @Override
    public CellData convertToExcelData(LocalDateTime localDate, ExcelContentProperty excelContentProperty
            , GlobalConfiguration globalConfiguration) throws Exception {
        return new CellData<>(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    }
}

一般情況下應(yīng)該是解決了?。?!

但是部署后問題還是一樣!!也不知道為什么沒有生效。

于是乎,經(jīng)過不斷得嘗試,還是報(bào)一樣得錯(cuò),無奈之下我只能在:EasyExcel寫入數(shù)據(jù)之前得到list集合循環(huán)遍歷,然后逐個(gè)用字符串進(jìn)行時(shí)間轉(zhuǎn)換

實(shí)體類更改:用一個(gè)String字符來代替LocalDateTime 來寫入Excel

代碼

   @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ExcelIgnore
//    @ExcelProperty(value="時(shí)間",index = 10,converter = LocalDateConverter.class)
    private LocalDateTime turnoutTime;
    @ExcelProperty(value="時(shí)間",index = 10)
    private String turnoutTimeString;

邏輯層更改

 List<Student> stus= (List<Student>) studentService.listByIds(student.getIds());
                log.info("stuss數(shù)據(jù)條數(shù):{}",stus.size());
                List<Student> list = JSON.parseArray(JSON.toJSONString(stus), Student.class);
                for (Student stu: list) {
					//類型的判斷
                    String sex="男";
                    if (stu.getSex() == 1) {
                        sex="男";
                    } else if (stu.getSex() == 2) {
                        sex="女";
                    }
                    stu.setSexName(sex);
                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
					//將LocalDateTime轉(zhuǎn)換String
                    stu.setTurnoutTimeString(stu.getTurnoutTime().format(formatter));
                }
                excelWriter.write(list, sheet);
           		excelWriter.finish();

最后到這里再進(jìn)行運(yùn)行,就沒什么問題了,只是可能有些性能的消耗,畢竟要是數(shù)據(jù)量大,10w+的數(shù)據(jù),這種情況有待考量,至于轉(zhuǎn)換類不生效的問題后期發(fā)現(xiàn)了再更吧,有知道的伙計(jì)們也分享一下唄!?。ㄆ婀值氖俏以谧⒔饫锩婕拥胕ndex = 10得序號(hào)和 @ColumnWidth(25)都沒有生效,當(dāng)然類型的轉(zhuǎn)換類也沒有生效?。。。?/p>

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot整合RestTemplate用法的實(shí)現(xiàn)

    SpringBoot整合RestTemplate用法的實(shí)現(xiàn)

    本篇主要介紹了RestTemplate中的GET,POST,PUT,DELETE、文件上傳和文件下載6大常用的功能,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Java大對(duì)象存儲(chǔ)之@Lob注解處理BLOB和CLOB數(shù)據(jù)的方法

    Java大對(duì)象存儲(chǔ)之@Lob注解處理BLOB和CLOB數(shù)據(jù)的方法

    本文將深入探討@Lob注解的使用方法、最佳實(shí)踐以及在處理大對(duì)象存儲(chǔ)時(shí)應(yīng)當(dāng)注意的性能與內(nèi)存考量,我們將通過實(shí)際示例展示如何在Java應(yīng)用中有效地管理和操作BLOB和CLOB數(shù)據(jù),感興趣的朋友一起看看吧
    2025-05-05
  • SpringBoot集成kaptcha驗(yàn)證碼

    SpringBoot集成kaptcha驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了SpringBoot集成kaptcha驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • SpringBoot中AOP的多種用途與實(shí)踐指南

    SpringBoot中AOP的多種用途與實(shí)踐指南

    Spring Boot結(jié)合AOP提供了強(qiáng)大的功能,可以用于日志記錄、性能監(jiān)控、異常處理、權(quán)限校驗(yàn)等多種場(chǎng)景,通過AOP,我們可以將橫切關(guān)注點(diǎn)從業(yè)務(wù)邏輯中分離出來,從而提高代碼的可維護(hù)性和可讀性,下面就來一起了解一下
    2026-03-03
  • Spring如何通過注解存儲(chǔ)和讀取對(duì)象詳解

    Spring如何通過注解存儲(chǔ)和讀取對(duì)象詳解

    在Spring中,要想更簡單的存儲(chǔ)和讀取對(duì)象的核心是使用注解,這篇文章主要給大家介紹了關(guān)于Spring如何通過注解存儲(chǔ)和讀取對(duì)象的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • SSH框架網(wǎng)上商城項(xiàng)目第21戰(zhàn)之詳解易寶支付的流程

    SSH框架網(wǎng)上商城項(xiàng)目第21戰(zhàn)之詳解易寶支付的流程

    這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項(xiàng)目第21戰(zhàn)之易寶支付的流程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • idea 創(chuàng)建properties配置文件的步驟

    idea 創(chuàng)建properties配置文件的步驟

    這篇文章主要介紹了idea 創(chuàng)建properties配置文件的步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • sqlmap 使用教程(從入門到進(jìn)階)

    sqlmap 使用教程(從入門到進(jìn)階)

    sqlmap是一款強(qiáng)大的開源 SQL 注入自動(dòng)化測(cè)試工具,支持識(shí)別并利用多種類型的 SQL 注入漏洞(Boolean-based、Time-based、Error-based、Stacked Queries 等),本文給大家介紹sqlmap使用教程,感興趣的朋友一起看看吧
    2016-11-11
  • Java過濾器Filter詳解

    Java過濾器Filter詳解

    這篇文章主要介紹了java過濾器中Filter,發(fā)送請(qǐng)求時(shí),如果有不符合的信息將會(huì)被filter進(jìn)行攔截,如果符合則會(huì)進(jìn)行放行。如果感興趣可以來學(xué)習(xí)一下
    2021-08-08
  • Mybatis 中的insertOrUpdate操作

    Mybatis 中的insertOrUpdate操作

    這篇文章主要介紹了Mybatis 中的insertOrUpdate操作,代碼簡單易懂,非常不錯(cuò)需要的的朋友參考下
    2016-12-12

最新評(píng)論

铁力市| 龙山县| 阿拉善左旗| 得荣县| 南部县| 泗阳县| 北京市| 二手房| 竹山县| 龙南县| 信丰县| 苗栗县| 新田县| 城步| 霍州市| 娄底市| 林西县| 凤庆县| 中超| 潜山县| 铜陵市| 安塞县| 太仓市| 海安县| 松滋市| 钦州市| 尉氏县| 银川市| 聊城市| 罗江县| 滦平县| 化隆| 定陶县| 炎陵县| 南平市| 云南省| 周口市| 福贡县| 霸州市| 天峻县| 盈江县|