spring反射工具类的简单使用 ReflectionUtils.doWithFields

背景

我们很多时候需要解析第三方的报文, 他们传的值可能不是JSON格式,

可能是 :
TEMP-Rtd=26;PM25-Rtd=15

这样的报文过来,而且又不是规范的驼峰命名,导致我们不能直接入库。所以决定用反射加注解去自动setvalue.

注解类


@Target({ElementType.TYPE,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface EventFieldMapping {

    String value() default "";

    String description() default "";
}


//实体类上的 案例:
    @ApiModelProperty("温度")
    @EventFieldMapping("TEMP-Rtd")
    private String temp;
    @ApiModelProperty("湿度")
    @EventFieldMapping("HUMI-Rtd")
    private String humi;

主角反射逻辑代码

        // 创建实体类
        DvMontiorEnv obj = new DvMontiorEnv();
        // 反射
        ReflectionUtils.doWithFields(obj.getClass(),
                field -> {
                    // 暴力反射
                    field.setAccessible(true);
                    // 判断注解
                    EventFieldMapping annotation = field.getAnnotation(EventFieldMapping.class);
                    if (annotation == null) {
                        return;
                    }
                    // 避免空值
                    if (StringUtils.isBlank(annotation.value())) {
                        return;
                    }
                    //这个map里面装的key-value
                    String value = hashMap.get(annotation.value());
                    // 设置对应值
                    field.set(obj, value);
                });


posted @   Rick_Leee  阅读(1431)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示