项目中需要过滤前面表单页面中传过来的实体类的中的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

最新文章

  1. JQuery实现对勾事件代码
  2. 从源码角度理清memcache缓存服务
  3. 【BZOJ-1336&amp;1337】Alie最小圆覆盖 最小圆覆盖(随机增量法)
  4. VMware三个版本workstation、server、esxi的区别
  5. 继承(引用~析构~virtual)
  6. Spring学习笔记之BeanFactory
  7. Thread类详解
  8. 巧用hidden传递参数
  9. Firemonkey 自定义Button的Style
  10. Thread.join()的使用
  11. 在Visual Studio2017和2015中开发报表项目
  12. EffectiveTensorflow:Tensorflow 教程和最佳实践
  13. kubernetes系列08—service资源详解
  14. CentOS 7.4nginx配置SSL
  15. java.net.BindException: Address already in use: JVM_Bind:80 异常的解决办法
  16. jquery鼠标放上去显示悬浮层即弹出定位的div层
  17. scp机器间远程拷贝
  18. free vmstat查看内存及系统调优【转】
  19. java keytool详解
  20. 20172324《Java程序设计》第3周学习总结

热门文章

  1. 关于RAS加密中pfx格式提取字符串私钥 (转)
  2. 【常见Web应用安全问题】---4、Directory traversal
  3. session 与 cookie 区别
  4. JAVA-Unit05: 视图、序列、索引 、 约束
  5. python接口自动化22-签名(signature)鉴权(authentication)之加密(HEX、MD5、HMAC-SHA256)
  6. Java 设计模式 之 中介者模式(Mediator)
  7. MySql——触发器
  8. B. T-primes
  9. C语言和C++中的字符串(string)
  10. CentOS7.6安装JDK(Openjdk) - mvn package报错汇总