IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> JavaWeb request封装JavaBean工具类 -> 正文阅读

[移动开发]JavaWeb request封装JavaBean工具类

利用反射机制写的一个工具类,只做了String Integer Float类的自动封装,其他类请自行添加,注释很全

有问题可以评论留言,大家一起讨论

调用实例

Business business =  WebUtils.request2Bean(request,Business.class);

WebUtils.java

import com.neusoft.elm.entity.Business;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Enumeration;

/**
 * @author xxy
 * @version 1.0
 * @description:
 * @create 2022/2/22
 **/
public class WebUtils {

    public static <T> T request2Bean(HttpServletRequest request, Class<T> clazz) {
        try {
            T bean = clazz.newInstance();
            //username=aa password=bb email=aa@sina.com
            Enumeration<String> e = request.getParameterNames();
            while (e.hasMoreElements()) {
                String name = e.nextElement();  //username=aaa password=123
                String value = request.getParameter(name);
                if (value != null && value.trim().length() != 0) {
                    setProperty(bean, name, value);
                }
            }
            return bean;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private static <T> void setProperty(T bean, String name, String value) {
        Class<?> aClass = bean.getClass();
        Field[] fields = aClass.getDeclaredFields();
        /*
            大概逻辑
            循环bean类所有的变量
              如果变量的类和给出的类一致
                获取到该变量名的setter方法
                  执行获取的setter方法(需将String类型的Value转为对应类型的参数)
         */
        try {
            for (Field field : fields) {
                // String 类型 调用setter方法绑定
                if (field.getGenericType().toString().equals(String.class.toString())) { // 如果type是类类型,则前面包含"class ",后面跟类名
                    if (field.getName().equals(name)){
                        Method m = bean.getClass().getMethod(getMethodName(name), field.getType());
                        // 调用 setter 方法获取属性值
                        m.invoke(bean, value);
                    }
                }
                // Integer
                if (field.getGenericType().toString().equals(Integer.class.toString())) { // 如果type是类类型,则前面包含"class ",后面跟类名
                    if (field.getName().equals(name)){
                        Method m = bean.getClass().getMethod(getMethodName(name), field.getType());
                        // 不是String类需要转换
                        m.invoke(bean, Integer.parseInt(value));
                    }

                }
                //Float
                if (field.getGenericType().toString().equals(Float.class.toString())) { // 如果type是类类型,则前面包含"class ",后面跟类名
                    if (field.getName().equals(name)){
                        Method m = bean.getClass().getMethod(getMethodName(name), field.getType());
                        m.invoke(bean, Float.parseFloat(value));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /*
        获取getter方法名
        例如:如下方法
        private String name;
        public void setName(String name){this.name=name;}
     */
    private static String getMethodName(String name) {
        return "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
    }

    // 测试
    public static void main(String[] args) {
        Business business = new Business();
        setProperty(business, "remarks", "succes");
        setProperty(business, "orderTypeId", "1");
        setProperty(business, "deliveryPrice", "1.10");
        System.out.println(business);
    }

}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:42:07  更:2022-02-26 11:45:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 15:41:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码