博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反射封装request参数为对象
阅读量:4179 次
发布时间:2019-05-26

本文共 2765 字,大约阅读时间需要 9 分钟。

public class RequestUtil {    public static
T parseRequset( HttpServletRequest request,Class
c){ T t=null; try { t=c.newInstance();//根据反射生成实例对象 Method[] ms=c.getMethods(); Map
map=request.getParameterMap(); //map.entrySet()是将map里的每一个键值对//取出来封装成一个Entry对象在存到一个Set集合里面 //Map.Entry
的意思是一个泛型,表//示Entry里装的String[]数组和string的字符串,分别是//key和value for(Map.Entry
entry:map.entrySet()){ String key=entry.getKey(); String[] values=entry.getValue(); if(values!=null&&values.length>1){ continue; } String v=values[0]; key="set"+key; for(Method m:ms){ if(key.equalsIgnoreCase(m.getName())){ String parameterTypeName=m.getParameterTypes()[0].getName(); if("int".equals(parameterTypeName)||"java.lang.Integer".equals(parameterTypeName)){ m.invoke(t, Integer.parseInt(v)); }else if("float".equals(parameterTypeName)||"java.lang.Float".equals(parameterTypeName)){ m.invoke(t, Float.parseFloat(v)); }else if("double".equals(parameterTypeName)||"java.lang.Double".equals(parameterTypeName)){ m.invoke(t, Double.parseDouble(v)); }else if("long".equals(parameterTypeName)||"java.lang.Long".equals(parameterTypeName)){ m.invoke(t, Long.parseLong(v)); }else if("short".equals(parameterTypeName)||"java.lang.Short".equals(parameterTypeName)){ m.invoke(t, Short.parseShort(v)); }else if("java.lang.String".equals(parameterTypeName)){ m.invoke(t,v); } break; } } } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } return t; }

public Object invoke(Object obj,Object args[])

参数:
obj - 从中调用底层方法的对象,必须是实例化的对象
args - 用于方法调用的参数,是个Object数组,因为参数有可能有多个
返回:
使用参数 args 在 obj 上指派该对象所表示方法的结果

例如:String result = (String)method.invoke(obj , sql);

执行obj的method方法(参数为sql),返回String类型结果

args参数可以为空,就是对应方法没有参数,

如:new Car().getBM() —- method.invoke( obj );//method为getBM,obj为Car类

obj可以为空,但必填null,表示同类中的公用方法,

如:getName( type ) —- method.invoke( null , args);//method为getName,args为type

转载地址:http://gfhai.baihongyu.com/

你可能感兴趣的文章
利用多线程(用到原子类AtomicInteger)往数据库批量插入大量数据
查看>>
多个线程操作数组
查看>>
定长线程池的应用
查看>>
ArrayBlockingQueue的简单使用
查看>>
Git 常用命令总结(一)
查看>>
Git 常用命令总结(二)
查看>>
JAVA 并发——synchronized的分析
查看>>
Echarts——使用 dataset 管理数据
查看>>
DES 加解密工具类
查看>>
SpringBoot多模块项目实践(Multi-Module)
查看>>
第一篇: 服务的注册与发现Eureka(Greenwich版)
查看>>
第二篇: 服务消费者(rest+ribbon)(Greenwich版本)
查看>>
第三篇: 服务消费者(Feign)(Greenwich版本)
查看>>
获取客户的真实IP地址
查看>>
第四篇: 熔断器(Ribbon+Feign)(Greenwich版本)
查看>>
Linux的常用命令(一)
查看>>
Linux的常用命令(二)
查看>>
第六篇: 分布式配置中心(Greenwich版本)
查看>>
SpringBoot | 配置logback-spring.xml
查看>>
SpringBoot | 第一章:构建第一个SpringBoot工程
查看>>