From d114d5de611d8744fd5f2735b7b9be0072112d31 Mon Sep 17 00:00:00 2001 From: lbw Date: Sat, 4 Mar 2023 22:37:42 +0800 Subject: [PATCH] =?UTF-8?q?:recycle:=20Refactoring=20code.=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81string[]=20=E7=B1=BB=E5=9E=8B=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aop/RequestExcelArgumentResolver.java | 6 ++- .../converters/StringArrayConverter.java | 48 +++++++++++++++++++ .../handler/AbstractSheetWriteHandler.java | 4 +- 3 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 pigx-common/pigx-common-excel/src/main/java/com/pig4cloud/pigx/common/excel/converters/StringArrayConverter.java diff --git a/pigx-common/pigx-common-excel/src/main/java/com/pig4cloud/pigx/common/excel/aop/RequestExcelArgumentResolver.java b/pigx-common/pigx-common-excel/src/main/java/com/pig4cloud/pigx/common/excel/aop/RequestExcelArgumentResolver.java index 27945e123..68e30c2f7 100644 --- a/pigx-common/pigx-common-excel/src/main/java/com/pig4cloud/pigx/common/excel/aop/RequestExcelArgumentResolver.java +++ b/pigx-common/pigx-common-excel/src/main/java/com/pig4cloud/pigx/common/excel/aop/RequestExcelArgumentResolver.java @@ -4,6 +4,7 @@ import com.alibaba.excel.EasyExcel; import com.pig4cloud.pigx.common.excel.annotation.RequestExcel; import com.pig4cloud.pigx.common.excel.converters.LocalDateStringConverter; import com.pig4cloud.pigx.common.excel.converters.LocalDateTimeStringConverter; +import com.pig4cloud.pigx.common.excel.converters.StringArrayConverter; import com.pig4cloud.pigx.common.excel.handler.ListAnalysisEventListener; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -73,8 +74,9 @@ public class RequestExcelArgumentResolver implements HandlerMethodArgumentResolv // 这里需要指定读用哪个 class 去读,然后读取第一个 sheet 文件流会自动关闭 EasyExcel.read(inputStream, excelModelClass, readListener).registerConverter(LocalDateStringConverter.INSTANCE) - .registerConverter(LocalDateTimeStringConverter.INSTANCE).ignoreEmptyRow(requestExcel.ignoreEmptyRow()) - .sheet().headRowNumber(requestExcel.headRowNumber()).doRead(); + .registerConverter(LocalDateTimeStringConverter.INSTANCE) + .registerConverter(StringArrayConverter.INSTANCE).ignoreEmptyRow(requestExcel.ignoreEmptyRow()).sheet() + .headRowNumber(requestExcel.headRowNumber()).doRead(); // 校验失败的数据处理 交给 BindResult WebDataBinder dataBinder = webDataBinderFactory.createBinder(webRequest, readListener.getErrors(), "excel"); diff --git a/pigx-common/pigx-common-excel/src/main/java/com/pig4cloud/pigx/common/excel/converters/StringArrayConverter.java b/pigx-common/pigx-common-excel/src/main/java/com/pig4cloud/pigx/common/excel/converters/StringArrayConverter.java new file mode 100644 index 000000000..9f45e07c6 --- /dev/null +++ b/pigx-common/pigx-common-excel/src/main/java/com/pig4cloud/pigx/common/excel/converters/StringArrayConverter.java @@ -0,0 +1,48 @@ +package com.pig4cloud.pigx.common.excel.converters; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.text.ParseException; +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * LocalDate and string converter + * + * @author L.cm + */ +public enum StringArrayConverter implements Converter { + + /** + * 实例 + */ + INSTANCE; + + @Override + public Class supportJavaTypeKey() { + return String[].class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public String[] convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) throws ParseException { + return cellData.getStringValue().split(","); + } + + @Override + public WriteCellData convertToExcelData(String[] value, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + return new WriteCellData<>(Arrays.stream(value).collect(Collectors.joining())); + } + +} diff --git a/pigx-common/pigx-common-excel/src/main/java/com/pig4cloud/pigx/common/excel/handler/AbstractSheetWriteHandler.java b/pigx-common/pigx-common-excel/src/main/java/com/pig4cloud/pigx/common/excel/handler/AbstractSheetWriteHandler.java index a9eabe448..14a4b2120 100644 --- a/pigx-common/pigx-common-excel/src/main/java/com/pig4cloud/pigx/common/excel/handler/AbstractSheetWriteHandler.java +++ b/pigx-common/pigx-common-excel/src/main/java/com/pig4cloud/pigx/common/excel/handler/AbstractSheetWriteHandler.java @@ -11,6 +11,7 @@ import com.pig4cloud.pigx.common.excel.annotation.ResponseExcel; import com.pig4cloud.pigx.common.excel.annotation.Sheet; import com.pig4cloud.pigx.common.excel.aop.DynamicNameAspect; import com.pig4cloud.pigx.common.excel.config.ExcelConfigProperties; +import com.pig4cloud.pigx.common.excel.converters.StringArrayConverter; import com.pig4cloud.pigx.common.excel.enhance.WriterBuilderEnhancer; import com.pig4cloud.pigx.common.excel.head.HeadGenerator; import com.pig4cloud.pigx.common.excel.head.HeadMeta; @@ -107,7 +108,8 @@ public abstract class AbstractSheetWriteHandler implements SheetWriteHandler, Ap public ExcelWriter getExcelWriter(HttpServletResponse response, ResponseExcel responseExcel) { ExcelWriterBuilder writerBuilder = EasyExcel.write(response.getOutputStream()) .registerConverter(LocalDateStringConverter.INSTANCE) - .registerConverter(LocalDateTimeStringConverter.INSTANCE).autoCloseStream(true) + .registerConverter(LocalDateTimeStringConverter.INSTANCE) + .registerConverter(StringArrayConverter.INSTANCE).autoCloseStream(true) .excelType(responseExcel.suffix()).inMemory(responseExcel.inMemory()); if (StringUtils.hasText(responseExcel.password())) {