Lombok @Data @Accessors 注解遇到的坑

碰到个反射的问题,原数据是一个 map,对应数据库表的键值对,此时需要将这个 map 转换成 Entity,所以会用到反射。用了 Apache BeanUtils,用了 BeanMap 都是不行,无法反射。

如下代码


import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.cglib.beans.BeanMap;

import java.util.HashMap;
import java.util.Map;

public class Test {

    public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put("id", "111");
        map.put("name", "xxxx");

        Model model = new Model();
        BeanMap.create(model).putAll(map);
        System.out.println(JSON.toJSONString(model));
    }

    @Data
    @Accessors(chain = true)
    public static class Model {
        private String id;
        private String name;
    }
}

此时你会发现其实没问题,但是输出结果如下:

{}

此时办法已经试遍了,后来修改 Entity,将 lombok 注解去掉,发现就OK了。此时不用想,肯定是遇到坑了,然后排查之后发现是 @Accessors 的问题,将其去掉就OK了。如下

import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.cglib.beans.BeanMap;

import java.util.HashMap;
import java.util.Map;

public class Test {

    public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put("id", "111");
        map.put("name", "xxxx");

        Model model = new Model();
        BeanMap.create(model).putAll(map);
        System.out.println(JSON.toJSONString(model));
    }

    @Data
    public static class Model {
        private String id;
        private String name;
    }
}

问题原因不清,有知道的麻烦留言告知一下,谢谢。

参考链接

lombok @Accessors用法_东京易冷-CSDN博客_@accessors@Accessors翻译是存取器。通过该注解可以控制getter和setter方法的形式。fluent 若为true,则getter和setter方法的方法名都是属性名,且setter方法返回当前对象。@Data@Accessors(fluent = true)class User {private Integer id;private String name;// ...https://blog.csdn.net/weixin_38229356/article/details/82937420

你可能感兴趣的:(java,java,lombok,反射)