easyexcel icon indicating copy to clipboard operation
easyexcel copied to clipboard

BeanMap dataMap put数据一直失败

Open luoxiaofeng1029 opened this issue 1 year ago • 12 comments

版本:3.3.2 问题1: 编译器源码报错 image 问题2: 我动态生成了一个实体类,代码如下:

 private Class<?> createDynamicClass(List<ArchiveField> archiveFields) {
        DynamicType.Builder<Object> builder = new ByteBuddy()
            .subclass(Object.class)
            .name("DynamicExcelEntity");

        for (ArchiveField field : archiveFields) {
            String fieldName = field.getFieldName();
            String fieldComment = field.getFieldComment();
            Class<?> fieldType = String.class;

            builder = builder.defineField(fieldName, fieldType, Visibility.PUBLIC)
                .annotateField(AnnotationDescription.Builder.ofType(ExcelProperty.class)
                    .defineArray("value", new String[]{fieldComment})
                    .build());
        }

        return builder.make()
            .load(getClass().getClassLoader())
            .getLoaded();
    }
在dataMap.put(fieldName, value);这一步一直put不进去.dataMap大小一直为0,断点如下动画所示

20231026_182752

luoxiaofeng1029 avatar Oct 26 '23 10:10 luoxiaofeng1029

什么场景会遇到这个问题? 我使用的挺好的

miaozhiyan avatar Oct 30 '23 08:10 miaozhiyan

什么场景会遇到这个问题? 我使用的挺好的

看我的问题2呀,动态生成的实体类.动态生成实体类的代码也给了呀.

luoxiaofeng1029 avatar Oct 30 '23 08:10 luoxiaofeng1029

同样的问题,请问解决了吗 ?

duweiwang avatar Nov 07 '23 14:11 duweiwang

同样的问题,请问解决了吗 ? 没有

luoxiaofeng1029 avatar Nov 16 '23 02:11 luoxiaofeng1029

@Test
    public void t1() {
        MemberInit memberInit = new MemberInit();
        BeanMap beanMap = BeanMapUtils.create(memberInit);
        beanMap.put("uid", "1");
        memberInit.setBirthday("2");
        System.out.println(memberInit);

    }

现在生日写进去了,可以在beanmap看到,uid没写进去 经过验证,能读get不能写put

cobight avatar Dec 15 '23 03:12 cobight

@Test
    public void t1() {
        MemberInit memberInit = new MemberInit();
        BeanMap beanMap = BeanMapUtils.create(memberInit);
        beanMap.put("uid", "1");
        memberInit.setBirthday("2");
        System.out.println(memberInit);

    }

现在生日写进去了,可以在beanmap看到,uid没写进去 经过验证,能读get不能写put

那看来确实有问题呀!!!

luoxiaofeng1029 avatar Dec 15 '23 03:12 luoxiaofeng1029

反复尝试,加@ Data 注解似乎没问题,但又加了@ Accessors(chain = true)就会导致put不进去

cobight avatar Dec 15 '23 06:12 cobight

反复尝试,加@ Data 注解似乎没问题,但又加了@ Accessors(chain = true)就会导致put不进去

确实如此,我也搞了半天,发现不报错,也放不进去。 使用@Accessors添加这个注解之后,会在setXXX方法返回对象自身类型,而EasyExcel只找setXXX返回类型为void的方法 因此报错了

并且,如果使用一堆注解: @Data @Builder(toBuilder = true) @NoArgsConstructor @AllArgsConstructor @Accessors(chain = true) 连报错信息都吞没了,而且还给个属性为空的数据

longshengtang avatar Dec 15 '23 13:12 longshengtang

什么场景会遇到这个问题? 我使用的挺好的

@Data @Builder(toBuilder = true) @NoArgsConstructor @AllArgsConstructor @Accessors(chain = true) 使用以上一堆注解时候试试,连报错信息都没有

longshengtang avatar Dec 15 '23 13:12 longshengtang

同样碰到了这个问题,应该就是框架只支持拿返回值为void的setXXX方法,用了@Accessor的DTO就G了,代码如下: image

bingegege avatar Jan 19 '24 09:01 bingegege

是的我也遇见了这个问题,原因是实体类上加了@accessors(chain = true)注解导致他赋不上值,建议把@accessors(chain = true)去掉,就好了

Y-DL avatar May 22 '24 02:05 Y-DL

是的我也遇见了这个问题,原因是实体类上加了@accessors(chain = true)注解导致他赋不上值,建议把@accessors(chain = true)去掉,就好了

我没加啊. image

luoxiaofeng1029 avatar May 22 '24 02:05 luoxiaofeng1029