javaweb实现自动将前端的属性值(HttpServletRequest)转化为后台对应的实体类
来源:互联网 发布:三维建模渲染软件 编辑:程序博客网 时间:2024/06/01 08:03
通常我们在后台需要获取前端的属性值的时候用到的是request.getParameter("xxx");
下面的方法将实现自动将HttpServletRequest中的值封装到实体类中,需要一定的Java反射技术。
要求:前端form表单中的input标签中name的值是实体类中的属性。这样才能被识别到。
例如:
在JSP中使用如下input:
<input type="text" name="age" value=""/>在Person.java实体类中有age属性并实现get和set方法,然后在controller(springMVC)层或者action(Structs2)中使用Person person = DTOBuilder.getDTO(request, Person.class);方法就可以自动将input标签age 的值设置到Person实例化对象person中的age属性里。
下面方法中的DateUtil.parseDateDayFormat(value);使用到时间工具类,请参考我的另一篇博客http://blog.csdn.net/bq1073100909/article/details/49472615
package org.dyb.util;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.math.BigDecimal;import javax.servlet.http.HttpServletRequest;/** * 通过反射技术将HttpServletRequest中的前端属性数据赋值到对应的实体类中,使用或修改本类需要熟悉Java反射技术 * 使用方法:Xxxx为相应的实体类 * DTOBuilder.getDTO(HttpServletRequest, Xxxx.class); */public class DTOBuilder { /** * 方法入口,得到Dto *@param request *@param dtoClass 传入的实体类 *@return */ public static Object getDTO(HttpServletRequest request, Class dtoClass) { Object dtoObj = null; if ((dtoClass == null) || (request == null)) return dtoObj; try { //实例化对象 dtoObj = dtoClass.newInstance(); setDTOValue(request, dtoObj); } catch (Exception ex) { ex.printStackTrace(); } return dtoObj; } /** * 保存数据 *@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; } } } /** * 通过request得到相应的值 *@param request HttpServletRequest *@param bindName 属性名 *@param bindType 属性的类型 *@return */ public static Object getBindValue(HttpServletRequest request, String bindName, Class bindType) { //得到request中的值 String value = request.getParameter(bindName); if (value != null) { value = value.trim(); } return getBindValue(value, bindType); } /** * 通过调用方法名(setXxxx)将值设置到属性中 *@param classObject 实体类对象 *@param strMethodName 方法名(一般都是setXxxx) *@param argsType 属性类型数组 *@param args 属性值数组 *@return *@throws NoSuchMethodException *@throws SecurityException *@throws IllegalAccessException *@throws IllegalArgumentException *@throws InvocationTargetException */ public static Object invokeMothod(Object classObject, String strMethodName, Class[] argsType, Object[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { //得到classObject这个类的方法 Method concatMethod = classObject.getClass().getMethod(strMethodName, argsType); //调用方法将classObject赋值到相应的属性 return concatMethod.invoke(classObject, args); } /** * 根据bindType类型的不同转成相应的类型值 *@param value String类型的值,要根据bindType类型的不同转成相应的类型值 *@param bindType 属性的类型 *@return */ public static Object getBindValue(String value, Class bindType) { if ((value == null) || (value.trim().length() == 0)) return null; String typeName = bindType.getName(); //依次判断各种类型并转换相应的值 if (typeName.equals("java.lang.String")) return value; if (typeName.equals("int")) return new Integer(value); if (typeName.equals("long")) return new Long(value); if (typeName.equals("boolean")) return new Boolean(value); if (typeName.equals("float")) return new Float(value); if (typeName.equals("double")) return new Double(value); if (typeName.equals("java.math.BigDecimal")) { if ("NaN.00".equals(value)) return new BigDecimal("0"); return new BigDecimal(value.trim()); } if (typeName.equals("java.util.Date")) //参考DateUtil.parseDateDayFormat方法,value如果是时间类型,必须是yyyy-MM-dd格式才能被识别 //请参考我的另一篇博客http://blog.csdn.net/bq1073100909/article/details/49472615 return DateUtil.parseDateDayFormat(value); if (typeName.equals("java.lang.Integer")) return new Integer(value); if (typeName.equals("java.lang.Long")) { return new Long(value); } if (typeName.equals("java.lang.Boolean")) { return new Boolean(value); } return value; }}
0 0
- javaweb实现自动将前端的属性值(HttpServletRequest)转化为后台对应的实体类
- JAVA实现将GeoHash转化为对应的经纬度坐标
- 将字符转化为对应的数字
- 利用java 反射将DTO类中的属性值更新到对应的实体类中
- 后台规定的大实体怎么转化为json对象
- 将N层集合对象自动转化为对应的.NET泛型对象(C++)
- 后台获取前端信息的纽带--HttpServletRequest
- 将复选框是否选择对应的样式转换为标记字段传给后台的实现
- 将汉字转化为它对应的拼音
- 将数值转化为对应的excel列
- 将任意数字转化为对应gbk输出的程序
- C#将DataTable转化为对应的对象
- C语言将整形转化为对应的字符型
- js如何将数字转化为对应的字母
- java 将jsonarray 转化为对应键值的jsonobject
- 从数据库读取数据后利用反射为对应的实体类的属性赋值
- 将实体类转化为json串
- java map转化为对应的类
- 10月28日
- Java - String vs StringBuffer vs StringBuilder
- 磁盘分区映射为新分区
- t2
- OpenGL中gl,glu,glut的区别
- javaweb实现自动将前端的属性值(HttpServletRequest)转化为后台对应的实体类
- golang ftp客户端示例 支持断点续传
- VB.Net程序设计:CodeStringHelper多行代码批量修改器
- 初探MyBatis
- 获取Windows系统版本信息
- mysql主从复制
- java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
- 定位和地图总结
- Android源码的第一级目录结构