JavaWeb Form数据封装至Bean中工具类

本文介绍了如何在JavaWeb中将JSP表单数据利用反射技术封装到实体Bean中,通过HttpServletRequest的getParameterMap()获取请求参数,并且强调了实体属性名与表单name属性的对应关系,无需考虑类型匹配。提供了一个简单的工具类实现示例,测试结果显示了成功转换后的Bean对象及其属性值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学JavaWeb,JSP提交Form表单数据通常封装至实体Bean中,再提交给Servlet,由于在Servlet中可以使用HttpServletRequest#getParameterMap() 得到Request中请求参数的Map集合,所以想通过Map中的值得到一个实体对象。

注意:定义实体的属性名要和Form表单标签的name属性值相同,同时Form表单传递来的数据都是String类型,可以不使用类型匹配条件。

格式:实体对象 toBean(map,实体对象.class)

1. 实体类:

package test;

import java.util.Date;

public class Person {

    private String name;

    private int age;

    private float salary;

    private double score;

    private Date date;

    private boolean flag;

    private Integer in;

    public Person(String name, int age, float salary, double score, Date date,
            boolean flag, Integer in) {
        super();
        this.name = name;
        this.age = age;
        this.salary = salary;
        this.score = score;
        this.date = date;
        this.flag = flag;
        this.in = in;
    }

    public Person() {
        super();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public float getSalary() {
        return salary;
    }

    public void setSalary(float salary) {
        this.salary = salary;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public Integer getIn() {
        return in;
    }

    public void setIn(Integer in) {
        this.in = in;
    }

    @Override
    public String toString() {
        return "Person [age=" + age + ", date=" + date + ", flag=" + flag
                + ", in=" + in + ", name=" + name + ", salary=" + salary
                + ", score=" + score + "]";
    }

}

2. 工具类,通过Java反射机制实现

package test;

import java.lang.reflect.Field;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

public class CommonUtil {

    public static <T> T toBean(Map<String, Object> map, Class<T> clazz) {

        if (map == null || map.size() <= 0) {
            return null;
        }
        T t = null;
        Set<Entry<String, Object>> entrySet = map.entrySet();
        try {
            t = clazz.newInstance();
            Field[] fields = clazz.getDeclaredFields();
            for (Entry<String, Object> entry : entrySet) {
                for (Field field : fields) {
                    field.setAccessible(true);
                    // 属性名
                    String fieldName = field.getName();
                    // 属性类型
                    String fieldType = field.getGenericType().toString();
                    System.out.println("属性名:" + fieldName + ", 属性类型:"
                            + fieldType);
                    if (fieldType.contains("String")
                            && fieldName.equalsIgnoreCase(entry.getKey())) {
                        field.set(t, entry.getValue());
                    } else if (fieldType.contains("int")
                            && fieldName.equalsIgnoreCase(entry.getKey())) {
                        field.set(t, entry.getValue());
                    } else if (fieldType.contains("float")&& fieldName.equalsIgnoreCase(entry.getKey())) {
                        field.set(t, entry.getValue());
                    } else if (fieldType.contains("double")&& fieldName.equalsIgnoreCase(entry.getKey())) {
                        field.set(t, entry.getValue());
                    } else if (fieldType.contains("long")&& fieldName.equalsIgnoreCase(entry.getKey())) {
                        field.set(t, entry.getValue());
                    } else if (fieldType.contains("byte")&& fieldName.equalsIgnoreCase(entry.getKey())) {
                        field.set(t, entry.getValue());
                    } else if (fieldType.contains("Integer")&& fieldName.equalsIgnoreCase(entry.getKey())) {
                        field.set(t, entry.getValue());
                    } else if (fieldType.contains("boolean")&& fieldName.equalsIgnoreCase(entry.getKey())) {
                        field.set(t, entry.getValue());
                    }else if (fieldType.contains("Date")&& fieldName.equalsIgnoreCase(entry.getKey())) {
                        field.set(t, entry.getValue());
                    }
                }

            }
            System.out.println("t= " + t);
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

        return t;
    }

}

3 测试

package test;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

public class TestUtil {

    @Test
    public void test() {
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("name", "小黑");
        map.put("age", 11);
        map.put("date", new Date());
        map.put("flag",true);
        CommonUtil.toBean(map, Person.class);
    }

}

输出结果:
属性名:name, 属性类型:class java.lang.String
属性名:age, 属性类型:int
属性名:salary, 属性类型:float
属性名:score, 属性类型:double
属性名:date, 属性类型:class java.util.Date
属性名:flag, 属性类型:boolean
属性名:in, 属性类型:class java.lang.Integer
t= Person [age=11, date=Wed Nov 02 11:39:35 CST 2016, flag=true, in=null, name=小黑, salary=0.0, score=0.0]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值