这里仅仅是为了记录一件十分奇怪的事情,在使用BeanUtils的过程中,所有的依赖包都添加了,

  • common logging
  • common collections
  • ···

在为boolean 这种基本的数据类型添加Property的时候,然而还是出现了:

java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMap


然后我就开始了Bug寻找之路,如下。

第一步

一开始我以为是转换类没有做好,然后尝试着在其帮助文档中搜索相关的转换类。

BooleanConverter: 看起来貌似是我想要的,于是在

BeanUtils.setProperty(bean,name,value)之前注册了一个

ConvertUtils.register(new BooleanConverter(),java.lang.Boolean.class)

然后还是失败了!

第二步

既然自带的转换器不能正常的工作,那我就尝试着写一个自定义的转换器吧。按照官网上的步骤,需要:

ConvertUtils.register(new Converter(){

            @Override
            public Boolean  convert(Class type, Object value) {
                return (Boolean)value;
            }
        }, java.lang.Boolean.class);

然后继续运行,发现,仍然很尴尬的失败了。

第三步

根据异常提示,是由于

java.lang.ClassNotFoundException:      org.apache.commons.collections.FastHashMap

然后就去找吧,最后竟然在更低版本的BeanUtils包里面给找到了。真的是很尴尬的一件事,然后就能正常的运行了。3.2版本的BeanUtils包下载地址

我的测试代码如下:

package beanutils;

import java.util.Date;

public class MyBean {

    private String name;
    private int age;
    private Date birthday;
    private boolean isAlive;

    public MyBean() {

    }

    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 Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public boolean isAlive() {
        return isAlive;
    }

    public void setAlive(boolean isAlive) {
        this.isAlive = isAlive;
    }

}
package beanutils;

import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.converters.BooleanConverter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import org.junit.Test;

public class TestMyBean {

    /**
     * 首先测试的是基本的数据类型
     *
     * @throws Exception
     */
    @Test
    public void test1() throws Exception {
        String name = "Mark";
        int age = 20;
        boolean isAlive = true;

        MyBean myBean = new MyBean();
        BeanUtils.setProperty(myBean, "name", name);
        BeanUtils.setProperty(myBean, "age", age);
        // 对于boolean貌似不能进行转换
        // BeanUtils.setProperty(myBean, "isAlive", isAlive);
        System.out.println("Print the result by BeanUtils");
        System.out.println("Name:" + myBean.getName());
        System.out.println("Age:" + myBean.getAge());
        System.out.println("IsAlive:" + myBean.isAlive());
    }

    /**
     * 对Date进行转换测试
     *
     * @throws Exception
     */
    @Test
    public void test2() throws Exception {
        String date = "2016-07-05";
        ConvertUtils.register(new DateLocaleConverter(), Date.class);
        MyBean myBean = new MyBean();
        BeanUtils.setProperty(myBean, "birthday", date);
        System.out.println("Birthday:" + myBean.getBirthday());

    }

    /**
     * 测试boolean类型的数据
     *
     * @throws Exception
     */
    @Test
    public void test3() throws Exception {

        boolean isalive = true;
        ConvertUtils.register(new BooleanConverter(), Boolean.class);
        MyBean myBean = new MyBean();
        BeanUtils.setProperty(myBean, "isAlive", isalive);
        System.out.println("IsAlive:" + myBean.isAlive());
    }
}

最后一点

在测试Date这个数据类型的时候买也是出现了一点错误。调试了很久也没能找到错误,最后发现时导包的时候导错了。因为Date应该导java.util.Date 而不是java.sql.Date.

希望大家引以为戒。虽然导包是个老生常谈的问题,但是还是应该注意一下吧在导包的时候注意一下。

BeanUtils Exception 之 FastHashMap的更多相关文章

  1. java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMap

    七月 26, 2017 1:52:15 上午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for ...

  2. java jdbc的优化之BeanUtils组件

    1. BeanUtils组件 1.1 简介 程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件. BeanUtils ...

  3. BeanUtils

    BeanUtils包的使用   BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作. 在使用BeanUtils工具包之前我们需要的Jar包有以下几种: ...

  4. BeanUtils.copyProperties()方法和PropertyUtils.copyProperties()的区别

    首先两者来源于同一个包: import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.Prop ...

  5. 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性

      本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Int ...

  6. BeanUtils: 威力和代价(转载)

    转自:http://blog.sina.com.cn/s/blog_ab3fbf1b0101jbxz.html Apache Jakarta Commons项目非常有用.我曾在许多不同的项目上或直接或 ...

  7. java转换json需要导入的jar包,org/apache/commons/lang/exception/NestableRuntimeException

    缺少相应jar包都会有异常,根据异常找jar包导入......     这里我说下lang包,因为这个包我找了好半天:   我用的是: commons-lang3-3.1.jar  出现异常: jav ...

  8. 使用beanUtils操纵javabean

    Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单.易用的API操作Bean的属性——BeanUtils,在Beanutil中可以直接进行类型的自动转换. ...

  9. [新手学Java]使用beanUtils控制javabean

    使用BeanUtils设置/读取属性的值以及默认支持的自动转化: @Test //使用BeanUtils设置/读取属性的值以及自动转化 public void test1() throws Illeg ...

随机推荐

  1. mysql列约束

    列属性(约束)1: 是否允许为空(not null)  --not null不允许为空create table t_1(    a tinyint(3) zerofill not null,    b ...

  2. 将python代码打印成pdf

    将python代码打印成pdf,打印出来很丑,完全不能看. mac下:pycharm 编辑器有print的功能,但是会提示: Error: No print service found. 所以需要一个 ...

  3. [SCOI2009]围豆豆

    Description Input 第一行两个整数N和M,为矩阵的边长. 第二行一个整数D,为豆子的总个数. 第三行包含D个整数V1到VD,分别为每颗豆子的分值. 接着N行有一个N×M的字符矩阵来描述 ...

  4. 【CODEVS 6384 大米兔学全排列】

    ·大米兔学习全排列,还有一些逆序对,还有一棵二叉索引树.· ·分析:       首先肯定不是像题目上说的那样,使用next_permutation去完成这道题,因为就算是线性的它也不能承受庞大的排列 ...

  5. hdu 1133 Buy the Ticket(Catalan)

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  6. [2017.4.7校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 报警啦.......hzwer又出丧题虐人啦..... 4道ctsc...有一道前几天做过了,一道傻逼哈希还wa了十几次,勉强过了3题..我好 ...

  7. BZOJ4926 皮皮妖的递推

    第二次乱出题.为了方便,以m=2为例,把原式变一下形,得f(i)+f(f(i-1))=i我们先无视掉那个-1,我们发现:诶,这个东西好像斐波那契数列.具体地,我们用f(n)表示把n用斐波那契数列进行拆 ...

  8. Dynamics 365中使用Web API将查找字段的值设置为空值的方法。

    摘要: 本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复270或者20180424可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyon ...

  9. Golang学习笔记:goroutine

    1.goroutine goroutine是go语言的并发体.在go语言里面能使用go关键字来实现并发. go func() 1.1 概念介绍 goroutine本质上是协程,我刚刚学习的时候就粗略地 ...

  10. JavaScript中的类

          JavaScript类的相关知识 1.例子 /* 例1 */// 定义一个构造函数function Range(from, to){ this.from = from; this.to = ...