使用BeanUtils设置/读取属性的值以及默认支持的自动转化:

@Test
//使用BeanUtils设置/读取属性的值以及自动转化
public void test1() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{
    Person p=new Person();
    //使用BeanUtils设置属性的值
    BeanUtils.setProperty(p, "username", "李四");
    //使用BeanUtils读取属性的值
    System.out.println(BeanUtils.getProperty(p, "username"););
    //类型不同依然可以自动转化,BeanUtils默认支持八种基本类型的转换
    BeanUtils.setProperty(p,"age", "123");
    System.out.println(p.getAge());

}

注册已有的转化器来完成复杂类型的自动转化:

@Test
//注册已有的转化器来完成复杂类型的自动转化
public void test3() throws IllegalAccessException, InvocationTargetException{
    Person p=new Person();
    String birthday="1995-05-05";

    //注册Apache提供的时间转换器
    ConvertUtils.register(new DateLocaleConverter(), Date.class);

    BeanUtils.setProperty(p, "birthday", birthday);

    System.out.println(p.getBirthday());
}

 

      Apache已有的时间转化器中不能很好地过滤空字符串,若待转换字符串为空则会抛出异常;而现实业务非常复杂,Apache无法提供给我们所有的类型转化方法,需要时我们可以注册自己需要的转换器完成业务需求。

 

注册自己的转换器完成时间转化:

@Test
//注册自己的转换器完成时间转化
public void test2() throws IllegalAccessException, InvocationTargetException{
    Person p=new Person();
    String birthday="1995-05-05";

    //为了日期可以赋值到bean的属性,我们给benUtils注册日期转换器
    ConvertUtils.register(new Converter(){
        @SuppressWarnings({ "unchecked", "rawtypes" })
        public Object convert(Class type,Object value){
            if(value==null){
                return null;
            }
            if(!(value instanceof String)){
                throw new ConversionException("只支持String类型的转换");
            }
            String str=(String) value;
            if(str.trim().equals("")){
                return null;
            }
            SimpleDateFormat dateformate=new SimpleDateFormat("yyyy-MM-dd");
            try {
                return dateformate.parse(str);
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
        }
    }, Date.class);

    BeanUtils.setProperty(p, "birthday", birthday);

    System.out.println(p.getBirthday());
}

 

直接使用map对象填充类:

@Test
//直接使用map对象填充类
public void test4() throws Exception{
    HashMap<String, String> map=new HashMap<String,String>();
    map.put("username","李四");
    map.put("password","lisi");
    map.put("age","26");
    map.put("birthday","1990-05-05");

    ConvertUtils.register(new DateLocaleConverter() , Date.class);

    Person p=new Person();
    BeanUtils.populate(p, map);

    System.out.println(p.getUsername());
    System.out.println(p.getPassword());
    System.out.println(p.getAge());
    System.out.println(p.getBirthday());

}

[新手学Java]使用beanUtils控制javabean的更多相关文章

  1. 新手学Java,有哪些入门知识点?

    很多小伙伴们在刚接触Java的时候,会有些迷茫,不知道该从哪里入手,不管是做前端还是后端,程序员都会用到JAVA,那该掌握哪些必要的基础知识呢.今天就跟大家分享新手学Java,有哪些入门知识点? 下面 ...

  2. [新手学Java]使用内省(Introspector)操作JavaBean属性

    获取类bean中的所有属性: @Test //获取类bean中的所有属性 public void test1() throws Exception{ BeanInfo info = Introspec ...

  3. [新手学Java]反射学习笔记

    示例类 @SuppressWarnings("unused") public class Person { public String Name; private int Age; ...

  4. 重学 Java 设计模式:实战外观模式「基于SpringBoot开发门面模式中间件,统一控制接口白名单场景」

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你感受到的容易,一定有人为你承担不容易 这句话更像是描述生活的,许许多多的磕磕绊绊总 ...

  5. 零基础学Java第二节(运算符、输入、选择流程控制)

    本篇文章是<零基础学Java>专栏的第二篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 第一章 运算符 1.1 算术运算符的概述和用法 运算符 对常量和变 ...

  6. 2018年如何快速学Java

    前言 只有光头才能变强 提前预警:本文适合Java新手阅读(老手可在评论区给下建议),希望大家看完能有所收获. 一.为什么我要写下这篇文章 1.1直接缘由: 在今天(2018年11月4日)有个同学给我 ...

  7. 【aliyun】学java,看这里,不迷茫!1460道Java热门问题

    阿里极客公益活动: 或许你挑灯夜战只为一道难题 或许你百思不解只求一个答案 或许你绞尽脑汁只因一种未知 那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了 他们用户自己手中的技术来帮助用户成长 ...

  8. 从零开始学 Java - log4j 项目中的详细配置

    你还会用笔来写字么 我是不怎么会了,有时候老是拿起笔之后不知道这个字怎么写,这时候就会拿起手机去打出来:有时候还会写出来这个字之后越看越不像,这时候就开始怀疑自己的能力了:有时候写出来了一大堆字之后, ...

  9. 从0.5开始学Java 零

    作为新世纪的码农,掌握多门语言是必须的. 我先从java学起,工作又是做c# ,现在辞职了想重新捡回java的技术,所以写一个长篇 来给自己复习 ,题目就叫做从0.5开始学java. 核心内容就是 一 ...

随机推荐

  1. 笔记 - 本地拦截genymotion或者Android模拟器的网络请求

    我们在主机上面运行了Burp或者fiddler,那么代理已经监听在本机的8080端口了. 那么我们需要在模拟器中进行如下设置: 1.在设置中,长按当前连接的wifi网络,弹出如下: 2. 点击修改网络 ...

  2. log4j总结

    log4j介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Sysl ...

  3. 【终极解决方案】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。

    困扰我大半年的错误,今天偶然间被解决了,特此分享给被同样问题纠结的朋友们! 之前的求助帖,无人应答: http://www.cnblogs.com/freeton/archive/2012/08/28 ...

  4. VC++ 学习笔记(一):如何开始

    毫无疑问,学习C++是一件痛苦的事情. 我大概十年前接触C++.那是在学校里,准备考研究生,某学校要求考C++.我就开始一点一点学习,学习的过程还是比较舒服的.不得不说,就古典C++的理论,钱老讲的还 ...

  5. UICollectionView瀑布流的实现原理(转)

    http://ios.jobbole.com/85689/ 和使用 UIScollView 创刊一个瀑布流是一样的方式 7cc829d3gw1f4nq2oc09zj20j00hvq90.jpg 我的 ...

  6. ARCGIS10.1 GeoDatabase深入理解:客户端连接与退出地理数据库时系统表的初始化

    平台软件:ARCIGS10.1 ,SQL Server2008R2 目的:了解客户端在连接arcgis 空间地理数据库后,地理数据库会做些什么样的初始化工作 准备工作: 1.准备好数据库日志文件查看工 ...

  7. [原创]实现android知乎、一览等的开场动画图片放大效果

    代码下载地址: https://github.com/Carbs0126/AutoZoomInImageView 知乎等app的开场动画为:一张图片被显示到屏幕的正中央,并充满整个屏幕,过一小段时间后 ...

  8. sql读取xml

    DECLARE @ItemMessage XML SET @ItemMessage=cast(N'<?xml version="1.0" encoding="utf ...

  9. 程序员的复仇:11行代码如何让Node.js社区鸡飞狗跳

    来源自:http://www.techug.com/node-js-community 几天前,一名 NPM(Node.js Package Manager)社区的贡献者 Azer Koçulu 出于 ...

  10. Codeforces Round #197 (Div. 2) (A、B、C、D、E五题合集)

    A. Helpful Maths 题目大意 给一个连加计算式,只包含数字 1.2.3,要求重新排序,使得连加的数字从小到大 做法分析 把所有的数字记录下来,从小到大排序输出即可 参考代码 #inclu ...