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只能变 ... 
