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 ...
随机推荐
- 三分钟入坑指北 🔜 Docsify + Serverless Framework 快速创建个人博客系统
之前由于学摄影的关系,为了提高自己的审美,顺便锻炼下自己的英文能力,翻译了不少国外艺术类的 文章.最近一直想搭一个个人博客来存放这些内容,又懒得折腾建站,遂一直搁置. 直到偶然发现了 docsify ...
- .NET httpClient Post请求,GET请求方法
1.后端是WebAPI,POST请求,修饰符是[FromBody]的字符串,[FromBody]修饰的时候数据是来自body部分,而不是来自url部分,所以后端取值会自动映射出数据,比如后端是这样的, ...
- Java中的合并与重组(下)
通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习. Java中的合并与重组上部分链接:https://www.cnblogs.com/youruike1/p ...
- [软件] Omnigraffle
一个商业软件, mac下画画图, 还挺好用的. 网上可以找到可用的注册码 https://blog.csdn.net/glw0223/article/details/90736751
- Mysql数据库忘记密码找回方法
Mysql数据库忘记密码找回 a 停止mysql服务 /etc/init.d/mysql stop b 使用--skip-grant-tables启动mysql,忽略授权登录验证 mysqld_saf ...
- SQL基础教程(第2版)第6章 函数、谓词、CASE表达式:练习题
END) AS low_price, END) AS mid_price, END) AS high_price FROM Product; 6_2.sql
- Dynamics CRM - 如何创建一个新的 Organization
最近需要新建几个 CRM 的场来测试或者开发,也就是要新建 Organization,但是每次我都忘了在哪操作,写篇 blog mark 一下. 首先,新建 Organization 当然是要在 CR ...
- 1. laravel 学习 环境搭建
1. 项目环境 vagrant + laradock (因为 自己手动搭建环境太麻烦了 自己弄了一下 感觉还是有些漏洞 所以采用 laradock) 2. Vagrantfile 备注 : box ...
- Lua与C++交互初探之C++调用Lua
Lua与C++交互初探之C++调用Lua 自从学习了lua这个脚本语言之后,无时不想着将他与c/c++联系起来,看看他真正的威力.奈何水平有限,网上找的代码无论怎样都无法运行成功.我知道是我少了某一步 ...
- 1027A. Palindromic Twist#变形回文串
题目内容:http://codeforces.com/contest/1027/problem/A 题目解析:输入T组字符串,每个字符串都必须改变一次,每个字母改变的规则是变成相邻的字母,字母a只能变 ...