當前端需要傳圖片時,后台用MultipartHttpServletRequest接收參數,request接收過來的參數有很多弊端,需要包裝成自己的model就得做轉化
弊端:
1.所接收的參數類型無法判斷,全是字符串類型的。其余類型都要轉,心累。。。。。
2.若傳入的參數中含有null,undefined的參數則直接變成了字符串“null”和“undefined”。有天突然看見生產庫中多了許多“null”,一臉懵逼。。。。
轉化成自己方法的代碼:
public static <T>T requestParameterToBean(HttpServletRequest request,Class<T> clszz) {
T obj = null;
BeanInfo beanInfo=null;
try {
//獲取該類的信息
beanInfo = Introspector.getBeanInfo(clszz);
//實例化該class
obj = clszz.newInstance();
} catch (IllegalAccessException e) {
LOGGER.error("實例化 JavaBean 失敗");
} catch (IntrospectionException e) {
LOGGER.error("獲取分析類屬性失敗");
} catch (InstantiationException e) {
LOGGER.error("實例化 JavaBean 失敗");
}
//獲取該類屬性的描述
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
Enumeration en = request.getParameterNames();
while (en.hasMoreElements()) {
String paramName = (String) en.nextElement();
PropertyDescriptor descriptor;
for(int i=0;i<propertyDescriptors.length;i++){
if(paramName.equals(propertyDescriptors[i].getName())&&!"class".equals(propertyDescriptors[i].getName())){
descriptor = propertyDescriptors[i];
String className = descriptor.getPropertyType().getName();
Method method = descriptor.getWriteMethod();
if (!("undefined".equals(request.getParameter(paramName))||"null".equals(request.getParameter(paramName)))){
Object value;
//這里的類型不一一枚舉,若傳過來的class還有別的類型,在這里加上
if(className.equals("java.lang.Boolean")){
value = Boolean.parseBoolean(request.getParameter(paramName));
}else if(className.equals("java.lang.Integer")){
value = Integer.parseInt(request.getParameter(paramName));
}else {
value =request.getParameter(paramName);
}
try {
method.invoke(obj, new Object[]{value});
}catch (IllegalAccessException e) {
LOGGER.error("調用set方法失敗");
} catch (InvocationTargetException e) {
LOGGER.error("字段映射失敗");
}
}
}
}
}
return obj;
}