java反射对实体类取值和赋值

项目中需要过滤前面表单页面中传过来的实体类的中的String类型变量的前后空格过滤,由于前几天看过一个其他技术博客的的java反射讲解,非常受益。于是,哈哈哈

public static <T> void modelTrim(T model){
        Class<T> clazz = (Class<T>) model.getClass();
        //获取所有的bean中所有的成员变量
        Field[] fields = clazz.getDeclaredFields();
        for(int j=0;j<fields.length;j++){
            //获取所有的bean中变量类型为String的变量
            if("String".equals(fields[j].getType().getSimpleName())){
                try {
                    //获取get方法名
                    String methodName = "get"+fields[j].getName().substring(0, 1).toUpperCase()
                            +fields[j].getName().replaceFirst("\\w", "");
                    Method getMethod = clazz.getDeclaredMethod(methodName);
                    //打破封装
                    getMethod.setAccessible(true);
                    //得到该方法的值
                    Object methodValue = getMethod.invoke(model);
                    //判断值是否为空或者为null,非的话这过滤前后空格
                    if(methodValue != null && !"".equals(methodValue)){
                        //获取set方法名
                        String setMethodName = "set"+fields[j].getName().substring(0, 1).toUpperCase()
                                +fields[j].getName().replaceFirst("\\w", "");
                        //得到get方法的Method对象,带参数
                        Method setMethod = clazz.getDeclaredMethod(setMethodName,fields[j].getType());
                        setMethod.setAccessible(true);
                        //赋值
                        setMethod.invoke(model, (Object)String.valueOf(methodValue).trim());
                    }
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                } catch (SecurityException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
            }
        }
    }

亲自上面试用是好使的

下面还有一套,通过request,和实体类来封装本人还未实验,以后有机会再试试

/**
     * 保存数据
     *@param request
     *@param dto
     *@throws Exception
     */
    public static void setDTOValue(HttpServletRequest request, Object dto) throws Exception {
        if ((dto == null) || (request == null))
            return;
        //得到类中所有的方法 基本上都是set和get方法
        Method[] methods = dto.getClass().getMethods();
        for (int i = 0; i < methods.length; i++) {
            try {
                //方法名
                String methodName = methods[i].getName();
                //方法参数的类型
                Class[] type = methods[i].getParameterTypes();
                //当时set方法时,判断依据:setXxxx类型
                if ((methodName.length() > 3) && (methodName.startsWith("set")) && (type.length == 1)) {
                    //将set后面的大写字母转成小写并截取出来
                    String name = methodName.substring(3, 4).toLowerCase() + methodName.substring(4);
                    Object objValue = getBindValue(request, name, type[0]);
                    if (objValue != null) {
                        Object[] value = { objValue };
                        invokeMothod(dto, methodName, type, value);
                    }
                }
            } catch (Exception ex) {
                throw ex;
            }
        }
    }

原文地址:https://www.cnblogs.com/ZenoLiang/p/10436298.html

时间: 2024-10-27 01:46:55

java反射对实体类取值和赋值的相关文章

通过Java反射做实体查询

我们在使用hibernate的时候,查询的时候都会和实体中的一些字段相结合去查询,当然字段少了,还算是比较简单,当字段多了,就不那么容易了,所以就自己写了个方法,根据实体中的字段信息去查询,废话不多说上代码: /** * 根据实体查询,将所有的参数封装到实体中查询即可,不可查询为null的信息 * @param t * @return * @throws SecurityException * @throws NoSuchMethodException * @throws IllegalArgu

也说说复制实体类的值类型

/// <summary> /// 复制实体的值类型 /// </summary> /// <typeparam name="T">实体类</typeparam> /// <param name="obj">实体对象</param> /// <returns></returns> public static T GetActualEntity<T>(T obj

Java中遍历实体类(处理MongoDB)

在实际过程中,经常要将实体类进行封装,尤其是处理数据库的过程中:因此,对于遍历实体类能够与数据库中的一行数据对应起来. 我是使用的环境是Spring boot,访问的数据库时MongoDB 实体类遍历: 1 //java中遍历实体类,获取属性名和属性值 2 public static void testReflect(Object model) throws Exception{ 3 for (Field field : model.getClass().getDeclaredFields())

js 定义像java一样的map方便取值

js 定义像java一样的map方便取值. 百度有位大神说"js对象本身就是一种Map结构",这真是一段让人欢天喜地的代码. <script> //定义一个全局map var map = {}; var key0 = '0'; var key1 = '1'; map[key0] = '0-真实报文'; map[key1] = '1-虚拟报文'; //row 获取这行的值 ,index 获取索引值 function testJsMap(key){ //如果遍历map for(

JAVA反射之CLass类的练习

1 package zhang; 2 /** 3 * JAVA反射之CLass类的练习 4 * 5 * 在面向对象的语言里,万事万物皆对象,那么类是谁的对象呢? 6 * 类的类型是CLass 7 * 8 * */ 9 class Test{ 10 void print(){ 11 System.out.println("Hello world!"); 12 } 13 }//Test是一个类. 14 public class ClassDemo { 15 public static vo

java 反射 根据属性 动态设置值

package com.jhl.jvm.lesson8; import java.lang.reflect.Field; /** * * @author jhl * java 反射 根据属性 动态设置值 demo * */ public class ExceptionLog { private String exceptionLogId; private String processingType; private String type; private String content; pub

Java web 常见对象的取值方法整理

一.从request中取值: 1.取param: servlet:  request.getParameter() request.getParameterValues() jsp脚本:request.getParameter() request.getParameterValues() jstl/el:  ${param.name} ${paramaValues.names[0]} struts ognl:<s:property value="#parameters.ParamName[

对比两个实体类属性值的差异

/// <summary> /// 对比两个实体类属性值的差异 /// </summary> /// <typeparam name="T">实体类</typeparam> /// <param name="oldMod">原实体类</param> /// <param name="newMod">新实体类</param> /// <return

关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)

先看一段推理<*一切都是在8个比特位的前提下,讨论二进制的符号位,溢出等等,才有意义*> +124:0111 1100 -124:1000 0100 +125:0111 1101 -125:1000 0011 +126:0111 1110 -126:1000 0010 +127:0111 1111 -127:1000 0001 +128:0 1000 0000   -128:1000 0000 从上述过程对比可以看出:+128是在127的基础上加1得到,但是会造成溢出(JAVA中byte的大小