[alibaba/easyexcel]在使用Converter接口时,能否使用枚举类来返回映射的值?

2023-12-08 57 views
7

目前有很多字段是有枚举来做映射的,现在导出时我需要对每个枚举类进行转换,所以想能否支持按枚举类来直接做映射,而不是手动去写

回答

8

枚举Converter和普通Converter没有任何区别,你自定义就行了啊 。不懂你想问的问题

是这样,我现在有几十个枚举类,我不想每个导出都要写一个converter接口实现类,所以想问问有没有通用的方案

5

你可以定义一个接口,让你的枚举实现。然后写这个接口的converter

是的,我刚才想到这个了,正在尝试

3

甚至你可以直接写一个Enum的converter也可以。手动注册进你本次执行就可以

1
  public  class EnumConverter implements Converter<Enum<?>> {

        @Override
        public Class<?> supportJavaTypeKey() {
            return Enum.class;
        }
        @Override
        public WriteCellData<?> convertToExcelData(WriteConverterContext<Enum<?>> context) {
            return new WriteCellData<>("自定义:" + context.getValue().name());
        }
    }

好的,谢谢,我试一下 这样写还是要在每个字段加注解吧

我转换了下思路,实现了,不知道你那边是否可以这样使用 image EnumConvert是通用转换类,LocationAreaTypeEnum是我对应的枚举类 @EasyExcelConvertAnnotation是我自己定义的一个注解,主要传入一个枚举类 image 接着在通用转换类中使用excelContentProperty对象,将注解上的枚举类获取到,接着映射一下就可以了

3

celContentProperty对象,将注解上的枚举类获取到,接着映射一下就可以了

你搞这么麻烦干嘛,把导出VO类里面需要枚举的字段,设置成枚举类型,这个枚举实现一个接口,获取name,然后用通用枚举就行了啊

6

现在的问题是,每个枚举字段都要带上注解 @ExcelProperty(converter = EnumConverter.class) 我的意思是,不能全局注解EnumConverter,如果能注册,这个注解我都不用带

7

celContentProperty对象,将注解上的枚举类获取到,接着映射一下就可以了

你搞这么麻烦干嘛,把导出VO类里面需要枚举的字段,设置成枚举类型,这个枚举实现一个接口,获取name,然后用通用枚举就行了啊

我的业务场景不能改字段类型,我这种适合我当前的业务

0

image image image image 泛型E是我自用的,可以不用带

你的这种方式我考虑过,但是放弃了