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;
}
java后台使用HttpServletRequest接收参数转换为model的更多相关文章
- HttpServletRequest接收参数的几种方法
HttpServletRequest接收参数的几种方法 我们经常用servlet和jsp, 经常用request.getParameter() 来得到数据. request.getParameter( ...
- 前端传实体数组;后台list实体接收参数
前端页面: $.ajax({ url: url, data: JSON.stringify(data), dataType: "json", contentType: " ...
- java 后台 post请求 携带参数 远程操作 调用接口
package com.huayu.tizong.matchteam.util; import java.io.BufferedReader; import java.io.IOException; ...
- JAVA 后台SSM框架接收安卓端的json数据
最近项目上与安卓端做JSON数据交互,使用的SSM框架,刚开始的时候感觉很简单,想着不就是把安卓端的JSON数据封装为Bean类对象吗? 于是就这样写了 可是这样一直报400,百度原因是因为请求url ...
- Postman测试后台使用@RequestBody接收参数的坑
问题原因:我在使用PostMan测试接口时发现数据传递不过来,是因为请求体定义为JSON数据,自动就传递不过来,虽然问题简单,但由于之前这个用的较少,所以就忽略了这点. 解决问题链接:https:// ...
- spring-boot-route(一)Controller接收参数的几种方式
Controller接收参数的常用方式总体可以分为三类.第一类是Get请求通过拼接url进行传递,第二类是Post请求通过请求体进行传递,第三类是通过请求头部进行参数传递. 1 @PathVariab ...
- 【spring mvc】后台spring mvc接收List参数报错如下:org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface
后台spring mvc接收List参数报错如下:org.springframework.beans.BeanInstantiationException: Failed to instantiate ...
- angular的$http.post()提交数据到Java后台接收不到参数值问题的解决方法
本文地址:http://www.cnblogs.com/jying/p/6733408.html 转载请注明出处: 写此文的背景:在工作学习使用angular的$http.post()提交数据时, ...
- 安卓发送图片文字,java后台接收
安卓使用retrofit2 和rxjava2 url: @Multipart @POST(UrlTools.STORYUPLOAD) Observable<Result> saveRepo ...
随机推荐
- 远程过程调用——RPC
https://www.jianshu.com/p/5b90a4e70783 清晰明了
- web页面内容打印总结
web页面打印有两种,一种是直接调用window.print()命令操作,一种是使用ActiveX插件(Object标签)操作,但是第二种只支持IE内核的浏览器. 示例1: <!DOCTYPE ...
- 提高js性能的方法
1.文档瘦身 (1)删除注释(版权及法律声明部分应保留),运行时不需要注释. (2)删除制表符.空格和换行符,这些只是为了便于程序的维护,但是与执行无关. (3)替换长的变量名为短的变量名. (4)使 ...
- python pandas 画图、显示中文、股票K线图
目录: 1.pandas官方画图链接 2.标记图中数据点 3.画图显示中文 4.画股票K线图 5.matplotlib基本用法 6.format输出 6.format输出例子 eps_range=[0 ...
- Linux-线程常见函数
1.线程创建与回收 (1).pthread_create 主线程用来创造子线程 (2).pthread_join 主线程用来等待(阻塞)回收子线程 (3).pthread_detach 主线程用来 ...
- Linux文件目录常用命令
查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 > 和 >& ...
- Hibernate(三)--关联映射
1.多对一 product----category category.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibern ...
- Spring Cloud Alibaba 教程 | Nacos(四)
Nacos环境隔离 Nacos管理台有一个单独的菜单"命名空间",里面默认存在一个名为"public"的默认命名空间,我们在使用Nacos时不管是作为注册中心还 ...
- 标准库模块——shutil模块
shutil.rmtee 删除目录及以内的所有文件. import shutil shutil.rmtree(r'D:\python\222') #包括222在内的所有文件全部删除.
- PAT Basic 完美数列(25) [two pointers]
题目 给定⼀个正整数数列,和正整数p,设这个数列中的最⼤值是M,最⼩值是m,如果M <= m * p,则称这个数列是完美数列.现在给定参数p和⼀些正整数,请你从中选择尽可能多的数构成⼀个完美数列 ...