java反射对实体类取值和赋值,可以写成通过实体类获取其他元素的数据,很方便哦~~~
2024-08-22 02:41:05
项目中需要过滤前面表单页面中传过来的实体类的中的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/whgk/p/6122036.html
最新文章
- JQuery实现对勾事件代码
- 从源码角度理清memcache缓存服务
- 【BZOJ-1336&;1337】Alie最小圆覆盖 最小圆覆盖(随机增量法)
- VMware三个版本workstation、server、esxi的区别
- 继承(引用~析构~virtual)
- Spring学习笔记之BeanFactory
- Thread类详解
- 巧用hidden传递参数
- Firemonkey 自定义Button的Style
- Thread.join()的使用
- 在Visual Studio2017和2015中开发报表项目
- EffectiveTensorflow:Tensorflow 教程和最佳实践
- kubernetes系列08—service资源详解
- CentOS 7.4nginx配置SSL
- java.net.BindException: Address already in use: JVM_Bind:80 异常的解决办法
- jquery鼠标放上去显示悬浮层即弹出定位的div层
- scp机器间远程拷贝
- free vmstat查看内存及系统调优【转】
- java keytool详解
- 20172324《Java程序设计》第3周学习总结
热门文章
- 关于RAS加密中pfx格式提取字符串私钥 (转)
- 【常见Web应用安全问题】---4、Directory traversal
- session 与 cookie 区别
- JAVA-Unit05: 视图、序列、索引 、 约束
- python接口自动化22-签名(signature)鉴权(authentication)之加密(HEX、MD5、HMAC-SHA256)
- Java 设计模式 之 中介者模式(Mediator)
- MySql——触发器
- B. T-primes
- C语言和C++中的字符串(string)
- CentOS7.6安装JDK(Openjdk) - mvn package报错汇总