BeanUtils类是Apache Commons BeanUtils的一个组件,提供了许多方便的方法来操作Java Bean。通过使用BeanUtils,可以轻松地复制和转换Bean属性。以下是一些常用的BeanUtils方法:
-
BeanUtils.copyProperties(Object dest, Object orig)
:将一个Java Bean的属性值复制到另一个Java Bean中。 -
BeanUtils.getProperty(Object bean, String propertyName)
:获取Java Bean中指定属性的值。 -
BeanUtils.setProperty(Object bean, String propertyName, Object value)
:将指定的值设置为Java Bean的某个属性。
在某些情况下,可能需要使用自定义转换器来处理转换过程中的特殊情况。例如,将Java Bean中的String类型属性转换为Date类型时,需要使用自定义转换器来转换数据类型
源码如下:
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.Converter; 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.InvocationTargetException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; @WebServlet("/RegisterController2") public class RegisterController2 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); //设置html的编码 resp.setContentType("text/html;charset=UTF-8");//只写这一句也可以 /* 接受前台数据和封装数据 beanUtils可以自动转换基础数据类型 beanUtils不自动转换数组到字符串 默认的日期转换器只支持2xxx-0x-0x */ Uers uers = new Uers(); try { //这个一个默认的构造器,输出样式是yyyy-MM-dd,如果想要多个样式都能实现就使用下面的自定义构造器 //ConvertUtils.register(new DateLocaleConverter(), Date.class); //自定义构造器,使用匿名内部类的方式 ConvertUtils.register(new Converter() { @Override public Object convert(Class aClass, Object value) { String str = null; if (value == null) { return null; } if (value instanceof String) { str = (String) value; } if (" ".equals(str)) { return null; } Date date1 = null; String stringDate = null; if (str.contains("/")) { stringDate = "yyy/MM/dd"; } if (str.contains("-")) { stringDate = "yyyy-MM-dd"; } if (str.contains("年")) { stringDate = "yyyy年MM月dd日"; } SimpleDateFormat sf = new SimpleDateFormat(stringDate); try { date1 = sf.parse(str); } catch (ParseException e) { e.printStackTrace(); } return date1; } }, Date.class); //BeanUtils.populate(封装的数据对象,req.getParameterMap)的使用 BeanUtils.populate(uers, req.getParameterMap()); //因为多选框可能会返回多个数据,要用数组来接收,所以要与getParameterValues()接收 String[] hobbies = req.getParameterValues("hobbies"); //这是自行处理的数组转字符串方法,不想处理的可以直接使用Arrays.toString()方法转换 uers.setHobbies(ArrayToString.arrayToString(hobbies)); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } //输出 System.out.println(uers); }
封装和html文件如下:
import java.util.Date; /* 一般带数据类型的实体化最好序列化 */ public class Uers { private String username; private String passwold; private String gender; private String hobbies; private String address; private String remark; private int age; private Date birthday; public String getHobbies() { return hobbies; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public void setHobbies(String hobbies) { this.hobbies = hobbies; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPasswold() { return passwold; } public void setPasswold(String passwold) { this.passwold = passwold; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getHobby() { return hobbies; } public void setHobby(String hobbies) { this.hobbies = hobbies; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", passwold='" + passwold + '\'' + ", gender='" + gender + '\'' + ", hobbies='" + hobbies + '\'' + ", address='" + address + '\'' + ", remark='" + remark + '\'' + ", age=" + age + ", birthday=" + birthday + '}'; } }
还是注意表单farm的cation属性要和WebServlet中的虚拟目录相同
我这里的User打错了大家别介意QAQ
启动项目:
将数据传输给后台并输出
这就是BeanUtils方法和自定义转换器的使用
其中的注意事项为
虚拟目录的一致
html编码的设置