java反射自动封装值到实体类

1.工具类
package com.util;

import com.entity.Student;

import javax.servlet.ServletRequest;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Enumeration;

/**
 * Created by wq on 2017/8/30.
 */
public class BeanOperateTools {

    /*
    利用反射进行所以请求参数的设置,要求参数名与属性名一致
     */

    /**
     *
     * @param obj
     * @param req
     * @param datePatern 将字符串变为日期时间格式化的字符串
     * @throws Exception
     */
    public static void  setValue(Object obj, ServletRequest req,String datePatern)
            throws Exception {//设置属性的内容
        {
            System.out.println("进了setValue方法.....");
            //取得class对象
            Class<?> cls = obj.getClass();
            //取得输入的全部参数名称
            Enumeration<String> enu = req.getParameterNames();
            //循环输入的全部参数名称
            while (enu.hasMoreElements()) {
                String paramName = enu.nextElement();//取得参数名称
                String paramValue = req.getParameter(paramName);
           //取得属性的类型是为了取得参数的类型,以确定method方法和是否转型

                Field field = cls.getDeclaredField(paramName); //取得指定名称的属性 (实体类里面
                //取得指定的操作方法,以满足反射调用
                Method method = cls.getMethod("set"+StringTools.initcap(paramName),field.getType());
                //根据类型进行数据的转换,同时调用setter设置数据
                //取得类型
                String fieldType=field.getType().getSimpleName();
                if ("string".equalsIgnoreCase(fieldType)) {
                    method.invoke(obj,paramValue);
                }else if ("integer".equalsIgnoreCase(fieldType)||"int".equalsIgnoreCase(fieldType)){
                    method.invoke(obj,Integer.parseInt(paramValue));
                }else if ("double".equalsIgnoreCase(fieldType)){
                    method.invoke(obj,Double.parseDouble(paramValue));
                }else if ("date".equalsIgnoreCase(fieldType)){
                    method.invoke(obj,new SimpleDateFormat(datePatern).parse(paramValue));

                }
            }
        }

    }
}
2.servlet中调用此方法

package com.servlet;

import com.entity.Student;
import com.sun.xml.internal.bind.v2.runtime.reflect.opt.FieldAccessor_Double;
import com.util.BeanOperateTools;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Enumeration;

/**
 * Created by wq on 2017/8/22.
 */
@WebServlet(name = "studentServlet", urlPatterns = {"/StudentServlet"})
public class StudentServlet extends HttpServlet {
    //private Student stu = new Student();
    private Student student=new  Student();

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

-------此处模仿依赖注入
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        try {
            BeanOperateTools.setValue(this.getStudent(),req,"yyyy-MM-dd");
        } catch (Exception e) {
            e.printStackTrace();
        }
        req.setAttribute("student",this.student);
        req.getRequestDispatcher("student_insert_do.jsp").forward(req,resp);
        // Class<?> cls= this.stu.getClass();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }



    public String initcap(String str) {//首字母大写

        return str.substring(0, 1).toUpperCase().concat(str.substring(1).toLowerCase());
    }
}
 
3.新增学生的jsp页面
<%--
  Created by IntelliJ IDEA.
  User: wq
  Date: 2017/8/21
  Time: 23:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="StudentServlet" method="post">
    姓名:<input type="text" name="name"><br>
    年龄:<input type="text" name="age"><br>
    成绩:<input type="text" name="score"><br>
    <input type="submit" value="输入">
    <input type="reset" value="重置">
</form>
</body>
</html>

4。展示学生的信息的页面
<%--
  Created by IntelliJ IDEA.
  User: wq
  Date: 2017/8/21
  Time: 23:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  <h1>姓名:${student.name}</h1>
  <h1>年龄:${student.age}</h1>
  <h1>成绩:${student.score}</h1>

</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_41731166/article/details/81317479