java后台使用HttpServletRequest接收參數轉換為model


當前端需要傳圖片時,后台用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;
}
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM