返回顶部
首页 > 资讯 > 后端开发 > Python >Java反射机制如何解决数据传值为空的问题
  • 547
分享到

Java反射机制如何解决数据传值为空的问题

2024-04-02 19:04:59 547人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录反射机制数据传值为空的问题java 反射 处理 空值反射机制数据传值为空的问题 两个小方法,用于解决BeanUtils.copyProperties(x, y);中源对象的值为空

反射机制数据传值为空的问题

两个小方法,用于解决BeanUtils.copyProperties(x, y);中源对象的值为空问题

1.通过实体注解数据库字段为Map的Key,需要的非空值为Value封装数据

@Override
    public Map<String, Object> setnodeParamItems(DispatchInfoItem dispatchInfoItem) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Map<String, Object> map = new HashMap<>();
        DispatchInfo dispatchInfo = new DispatchInfo();
        if (null != dispatchInfoItem) {
            BeanUtils.copyProperties(dispatchInfoItem, dispatchInfo);
        }
        Method[] methods = dispatchInfo.getClass().getDeclaredMethods();
        if (methods != null) {
            for (Method method : methods) {
                String methodName = method.getName();
                if (methodName.startsWith("get")) {
                    Column column = dispatchInfo.getClass().getDeclaredMethod(methodName).getAnnotation(Column.class);
                    Object value = method.invoke(dispatchInfo);
                    if (null != column && StringUtils.isNotBlank(StringHelper.getString(value))) {
                        map.put(column.name(), value);
                    }
                }
            }
        }
        return map;
    }

2.根据获取的值注入;

public void getMethods(DispatchInfo dispatchInfo, Map<String, Object> map) throws Exception {
        //获取方法上的注解值
        Method[] methods = dispatchInfo.getClass().getDeclaredMethods();
        if (methods != null) {
            for (Method method : methods) {
                String methodName = method.getName();
                if (methodName.startsWith("get")) {
                    Column column = dispatchInfo.getClass().getDeclaredMethod(methodName).getAnnotation(Column.class);
                    if (column != null) {
                        String setMethodName = methodName.replaceFirst("(get)", "set");
                        Method setMethod = dispatchInfo.getClass().getMethod(setMethodName, method.getReturnType());
                        ;
                        if (null != map.get(column.name())) {
                            setMethod.invoke(dispatchInfo, map.get(column.name()));
                        }
                    }
                }
            }
        }
    }

3.根据值进行实际的操作 

java 反射 处理 空值

package org.zkdg.utils.spring.annotations.impl;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.sql.SQLException;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.zkdg.utils.entity.ajaxEntity;
import org.zkdg.utils.spring.annotations.NNull;
@Aspect
@Component

public class AjaxEntityHandler {
    // @Pointcut("@annotation(org.zkdg.utils.annotations.AfterHandler)")
    @Pointcut("@annotation(org.zkdg.utils.spring.annotations.NullValidate)")
    // @Pointcut("execution(* org.dcexam.*.service.*.*(..))")
    public void beforeCall() {
        // service方法调用之前,检测参数,仅限第一个参数, 不能为空值
    }
    
    @Pointcut("execution(* org.dcexam.*.service.*.*(..))")
    public void afterThrowEx() {
        System.out.println("************\n\n\n\n\n\n\n\n\n\n\n\n*******");
    }
    @Around(value = "beforeCall()")
    public AjaxEntity doBefore(ProceedingJoinPoint point) throws Throwable {
        // TODO Auto-generated method stub
        // 判断不能为空
        Object[] args = point.getArgs();
        if (args == null || args[0] == null) {
            return new AjaxEntity("warning", "未选择任何数据。。。");
        }
        // 获取代理对象类方法参数
        MethodSignature target = (MethodSignature) point.getSignature();
        Annotation[][] annotations = target.getMethod().getParameterAnnotations();
        int argsIndex = 0;
        StringBuilder sb = new StringBuilder();
        for (Annotation[] annotation : annotations) {
            NNull nn = (NNull) annotation[0];
            String[] descs = nn.desc();
            String[] fields = nn.field();
            if (fields.length > 0 && fields.length > 0 && descs.length == fields.length) {
                for (int i = 0; i < fields.length; i++) {
                    Field field = args[argsIndex].getClass().getDeclaredField(fields[i]);
                    // 允许访问
                    field.setAccessible(true);
                    Object object = field.get(args[argsIndex]);
                    if (object == null) {
                        sb.append(descs[i]).append("不能为空。。。<br>");
                    }
                    if (object instanceof String) {
                        String string = (String) object;
                        if (string.trim().length() == 0)
                            sb.append(descs[i]).append("不能为空。。。<br>");
                        else if (string.trim().equals("0"))
                            sb.append("未选择" + descs[i] + "。。。<br>");
                    } else if (object instanceof Number) {
                        Integer integer = (Integer) object;
                        if (integer == 0)
                            sb.append("未选择" + descs[i] + "。。。<br>");
                    }
                }
                if (sb.length() > 0)
                    return AjaxEntity.ERROR(sb.toString());
            }
            argsIndex++;
        }
        // 加上@Nullvalidate 注解,不允许出现空 值
        for (Object obj : args) {
            if (obj == null) {
                return AjaxEntity.WARNING("出现了不允许的空值");
            } else if (obj instanceof String) {
                if (((String) obj).length() == 0) {
                    return AjaxEntity.WARNING("出现了不允许的空值");
                }
            }
        }
        AjaxEntity ajax = (AjaxEntity) point.proceed(args);
        return ajax == null ? AjaxEntity.ERROR("操作失败") : ajax;
    }
    
    @AfterThrowing(value = "afterThrowEx()", throwing = "ex")
    public void doAfterThrowEx(JoinPoint joinPoint, Exception ex) {
        AjaxEntity ajax = new AjaxEntity();
        if (ex.getCause() instanceof SQLException) {
            // 数据库操作异常
            ajax = AjaxEntity.ERROR("操作数据库时出现异常");
        }
    }
}

另外,java 命名时 。属性最好不要有下划线,否则可能会粗错。。。。。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Java反射机制如何解决数据传值为空的问题

本文链接: https://lsjlt.com/news/140990.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java反射机制如何解决数据传值为空的问题
    目录反射机制数据传值为空的问题java 反射 处理 空值反射机制数据传值为空的问题 两个小方法,用于解决BeanUtils.copyProperties(x, y);中源对象的值为空...
    99+
    2024-04-02
  • java利用反射机制如何实现获取对象的值
    本篇文章给大家分享的是有关java利用反射机制如何实现获取对象的值,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。通过反射机制得到对象中的属性和属性值 在对象中private没问...
    99+
    2023-05-31
    java 反射 对象
  • Java反射机制,如何将一个实体类所有字段赋值为null
    目录将一个实体类所有字段赋值为null起因第一种方法第二种方法将实体类中的null属性置为““或者空值工具类测试类先创建需要的实体将一个实体类所有字段赋值为n...
    99+
    2024-04-02
  • 如何在java中解决main函数中的args数组传值问题
    这篇文章将为大家详细讲解有关如何在java中解决main函数中的args数组传值问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java可以用来干什么Java主要应用于:1. web开发;...
    99+
    2023-06-06
  • 在 Golang 中保存到 MongoDB 时如何解决空数据值问题?
    在Golang中,保存数据到MongoDB时,经常会遇到空数据值的问题。当某个字段的值为空时,MongoDB默认会将其存储为null。然而,在实际应用中,我们可能更希望将其存储为一个特...
    99+
    2024-02-09
  • PHP中强制转换数据为数值的常见问题解决方案
    在PHP开发中,数据类型的转换是开发人员经常需要面对的问题之一。特别是在处理用户输入或从数据库中获取数据时,经常会遇到需要将数据强制转换为数值类型的情况。本文将讨论PHP中强制转换数据...
    99+
    2024-03-08
    数据 转换 数值
  • PHP中强制转换数据为数值的常见问题解决方案
    在PHP开发中,数据类型的转换是开发人员经常需要面对的问题之一。特别是在处理用户输入或从数据库中获取数据时,经常会遇到需要将数据强制转换为数值类型的情况。本文将讨论PHP中强制转换数据...
    99+
    2024-03-08
    数据 转换 数值
  • 如何解决ajax传递为空但显示在页面上为undefined的问题
    这篇文章将为大家详细讲解有关如何解决ajax传递为空但显示在页面上为undefined的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先问题是这样的:我用ajax到...
    99+
    2024-04-02
  • 如何在Java中利用反射机制查找指定的注解
    如何在Java中利用反射机制查找指定的注解?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。定义注解Controller.java@Target({ElementType.TYPE...
    99+
    2023-05-31
    java ava
  • Dreamweaver如何解决网页制作中的空格问题
    小编给大家分享一下Dreamweaver如何解决网页制作中的空格问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Dreamweaver是一个非常简单易用但又功能...
    99+
    2023-06-08
  • 如何解决img标签src属性值为空时2次请求问题
    这篇文章给大家分享的是有关如何解决img标签src属性值为空时2次请求问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。img src值为空时,2次请求 以前应该有同学遇到过类似的情况, 当有一个类似如 <...
    99+
    2023-06-08
  • 如何解决使用feign传递参数类型为MultipartFile的问题
    这篇文章主要介绍如何解决使用feign传递参数类型为MultipartFile的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!feign传递参数类型为MultipartFilefeign默认是不支持多媒体文件类型...
    99+
    2023-06-29
  • 如何解决win7电脑点关机没反应的问题
    这篇文章主要介绍如何解决win7电脑点关机没反应的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!win7电脑点关机没反应的解决方法/步骤:一、电脑中病毒当电脑中病毒的时候,可能会出现点关机没反应的情况,这时候大家...
    99+
    2023-06-27
  • vue表单为空也能提交的问题如何解决
    这篇文章主要讲解了“vue表单为空也能提交的问题如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue表单为空也能提交的问题如何解决”吧!vue表单为空也能提交今天在用Vue写表单验证...
    99+
    2023-06-30
  • 如何解决request.getParameter取值后的if判断为NULL的问题
    这篇文章主要为大家展示了“如何解决request.getParameter取值后的if判断为NULL的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决request.getParame...
    99+
    2023-06-29
  • 全网多种方法解决数据库有数据,但mybatis查询出来的值为Null、为空或不存在的问题
    文章目录 1. 复现问题 2. 分析问题 3. 解决问题 4. 解决该问题的其他方式 5. 总结说明 1. 复现问题 今天在查询组件详情时,却报出如下错误: 接下里,我便详细分析出现该错误的原因。 2. 分析问题...
    99+
    2023-08-22
    mybatis 数据库 mysql 后端 spring
  • 如何解决笔记本电脑开机没反应的问题
    这篇文章主要介绍了如何解决笔记本电脑开机没反应的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。检查是否是电源问题首先看是否电源没插好或者插头有问题,如果用的是电池,那就插...
    99+
    2023-06-28
  • 如何解决SpringBoot返回结果如果为null或空值不显示处理问题
    这篇文章主要介绍如何解决SpringBoot返回结果如果为null或空值不显示处理问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SpringBoot返回结果如果为null或空值不显示处理第一种方法:自定义消息转换...
    99+
    2023-06-20
  • 如何解决数据写入mysql数据库的问号问题
    这篇文章将为大家详细讲解有关如何解决数据写入mysql数据库的问号问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。解决数据写入mysql的问号问题&nbs...
    99+
    2024-04-02
  • MySQL如何解决delete大量数据后空间不释放的问题
    本篇内容主要讲解“MySQL如何解决delete大量数据后空间不释放的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL如何解决delete...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作