java实体类属性和注释转成Map<String,String>格式

1.需求说明

在工作中,有时需要把实体类中的属性和注释转换格式,返回给前端。根据类型的不同,动态的展示表头数据。

2.方法

2.1首先根据传参判断,得到需要转换的实体类。

    public Map<String,String> getTableHeader(String metadataType){
        Map<String, String> map = new HashMap<>();
        switch (DicMapTypeEnums.getEnum(Integer.valueOf(metadataType))) {
            case MYSQL:
                map= getHeader(DataSourceResult.class);
                break;
            case TABLE:
                map= getHeader(TableResult.class);
                break;
        }
        return map;
    }
@Data
public class DataSourceResult {
    ....
    @JsonProperty("数量")
    private int tableCount;
    /**
     * 热度
     */
    @JsonProperty("热度")
    private int hot;
    /**
     * 关注度
     */
    @JsonProperty("关注度")
    private int attention;
    /**
     * 更新时间
     */
    @JsonProperty("更新时间")
    private String updateTime;
}

2.2利用实体类上的@JsonProperty注解,去解析。

    public Map<String,String> getHeader(Class<?> t){
        List<String> reflect = FieldTransfer.reflect(t);
        Map<String, String> map = new HashMap<>();
        for(String properyName:reflect){
            String targetName = FieldTransfer.trans(properyName, t);
            map.put(properyName,targetName);
        }
        return map;
    }

2.3具体的解析方法

    public static String trans(String name, Class<?> t ) {
        String value="";
        try {
            Field field = t.getDeclaredField(name);
            JsonProperty annotation = field.getAnnotation(JsonProperty.class);
            value = annotation.value();
            return value;
        } catch (NoSuchFieldException|SecurityException e) {
            logger.warn("前端传多余字段,此错误不用处理,{}",e.toString());
        }
        return value;
    }


版权声明:本文为loveking6原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。