扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
怎么在Java中使用BeanUtils组件?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
创新互联是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括成都网站建设、做网站、电商网站制作开发、小程序定制开发、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!
BeanUtils是Apache commens组件里面的成员,由Apache提供的一套开源api,用于简化对javaBean的操作,能够对基本类型自动转换。
BeanUtils组件是用于简化javaBean的操作,那么什么是javaBean呢?简单来说,javaBean实质就是java类,只不过是遵循了某种规范的java类。
必须具有一个无参的构造方法
属性必须私有化
私有化的属性必须通过public类型的方法来暴露,也就是说要出现setXXX()、getXXX()或者isXXX()的方法
下载BeanUtils
http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi,下载好组件,再到项目里面引入jar文件。
commons-beanutils-1.9.3.jar
commons-logging-1.2.jar
注意:当缺少日志jar包,会出现如下的报错情况。
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
logging组件的下载地址:http://commons.apache.org/proper/commons-logging/download_logging.cgi
public class Student { private String name; private String id; private int age; private String sex; private Date d; public Student() { super(); } public Date getD() { return d; } public void setD(Date d) { this.d = d; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Student [name=" + name + ", id=" + id + ", age=" + age + ", sex=" + sex + ", d=" + d + "]"; } }
对象的拷贝,BeanUtils.copyProperties(Object dest,Object orig)
对象属性的拷贝,BeanUtils.copyProperties(Object bean,String name,Object value)或者BeanUtils.setProperty(Object bean,String name,Object value)
map数据封装到Javabean,populate(Object bean, Map
实例
对象的拷贝
@Test public void test() throws Exception { //创建对象 Student s=new Student(); /** * 组件对JavaBean的操作 * bean:javaBean对象 * name:对象的属性名称 * value:对象的属性值 */ //1.实现对象的属性拷贝, 对于基本数据类型,会自动进行类型转换 BeanUtils.copyProperty(s, "id","2018100712"); //2.实现对象之间的拷贝:Object dest<---Object orig Student s2=new Student(); BeanUtils.copyProperties(s2, s); System.out.println(s2); }
对象属性的拷贝
@Test public void test() throws Exception { //创建对象 Student s=new Student(); /*一般的操作 s.setId("1221212"); s.setName("老王"); System.out.println(s); */ //1.实现对象的属性拷贝, 对于基本数据类型,会自动进行类型转换 BeanUtils.copyProperty(s, "id","2018100712"); System.out.println(s) }
map数据封装到javaBean
注意:要map中的数据封装到JavaBean中去,需要map中的key与JavaBean里面的私有化的属性要相匹配
@Test public void test() throws Exception { //创建对象 Student s2=new Student(); //1.map的数据拷贝到对象中去 Mapmap = new HashMap (); map.put("id","12233"); map.put("name","老王"); map.put("sex","男"); BeanUtils.populate(s2, map); System.out.println(s2); }
当javaBean中出现非基本类型数据的私有化属性,并且需要对该数据进行封装时,就要去注册该数据类型的类型转换器了,不如就会出现错误,比如该Student对象中的日期类型。
日期类型转换出错:org.apache.commons.beanutils.converters.DateConverter toDate 警告: DateConverter does not support default String to 'Date' conversion,可以看出工具类converters在转换的时候出现了错误,为此我们可以去查看该类,以便我们接下来去实现类型转换。
在解压出来的BeanUtils文件下的apidoc目录中的index.html里面可以找到该类的说明,会发现它是一个接口,有很多的实现类,我们可以使用里面的实现类来做日期类型的转换或者说我们可以自己去注册个类型转换器。
去复写ConvertUtils里面的register(Converter converter, Class> clazz)方法
@Test public void test2() throws Exception { //假设网页表单提交过来的数据 String name="老王"; String id="121212"; String date="2018-10-11"; Student s=new Student(); //1.自定义:注册日期类型转换器去复写ConvertUtils里面的register(Converter converter, Class> clazz)方法 ConvertUtils.register(new Converter() { //修改第三方jar引入方法的参数时候,可以关联源码,ctrl选择该类,点进去,选择Attach source--->external file @Override public Object convert(Class type, Object value) { //判断 if (value ==null ||"".equals(value.toString().trim())){ return null; } if (type !=Date.class){ return null; } try { //字符串转换为日期 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); return sdf.parse(value.toString()); } catch (Exception e) { throw new RuntimeException(e); } } },Date.class); //把表单的数据封装到对象中去 BeanUtils.copyProperty(s, "name",name); BeanUtils.copyProperty(s, "id",id); BeanUtils.copyProperty(s, "d",date); System.out.println(s); }
@Test public void test3() throws Exception { //利用组件提供的日期类型转换器,提供一个实现类 //假设表单的数据 String name="老王"; String id="121212"; //当日期字符串出现空字符串或者出现空格的情况,会报错org.apache.commons.beanutils.ConversionException String date="2018-09-12"; Student s=new Student(); ConvertUtils.register(new DateLocaleConverter(), Date.class); //把表单的数据封装到对象中去 BeanUtils.copyProperty(s, "name",name); BeanUtils.copyProperty(s, "id",id); BeanUtils.copyProperty(s, "d",date); System.out.println(s); }
注意:当日期字符串是空字符串或者存在空格的时候,会报错!
获取表单提交的数据并封装到javabean中去,request.getParameterMap()获取所有的参数并存储到Map中去,并利用BeanUtils里面的populate(Object bean, Map
1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>注册
jsp显示的结果:
2.servlet
package cn.tan.servlet; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import cn.tan.entry.Student; public class GetDataServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); //获取所有参数 Mapmap = request.getParameterMap(); Student s=new Student(); try { BeanUtils.populate(s, map); //测试,输出封装的结果 System.out.println(s); } catch (Exception e) { throw new RuntimeException(e); } } }
输出结果:Student [name=老王, age=0, password=11111, phone=13232174361]
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流