A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© youc3576 黑马帝   /  2011-9-29 23:21  /  3780 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.youc.beanutils;

import java.beans.Beans;
import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.junit.Test;

public class Demo01 {
        @Test
        public void test1() throws IllegalAccessException,
                        InvocationTargetException {
                Person p = new Person();
                BeanUtils.setProperty(p, "name", "x***");
                System.out.println(p.getName());
        }

        @Test
        public void test2() throws IllegalAccessException,
                        InvocationTargetException {
                String name = "aaa";
                String password = "124";
                String age = "23";
                String brithday = "1989-09-09";

                ConvertUtils.register(new Converter() {
                        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.equals("")) {
                                        return null;
                                }
                                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                                try {
                                        return sdf.parse(str);
                                } catch (ParseException e) {
                                        throw new RuntimeException(e);
                                }
                        }
                }, Date.class);

                Person p = new Person();
                BeanUtils.setProperty(p, "name", "name");
                // 只支持8中基本数据类型的自动转换,这里自动转换了age的类型
                BeanUtils.setProperty(p, "age", "age");
                BeanUtils.setProperty(p, "password", "password");
                BeanUtils.setProperty(p, "brithday", "brithday");

                System.out.println("姓名:" + p.getName());
                System.out.println("年龄:" + p.getAge());
                System.out.println("密码:" + p.getPassword());
                System.out.println("生日:" + p.getBrithday());
        }
}
junit测试错误这个?为啥啊?

java.lang.RuntimeException: java.text.ParseException: Unparseable date: "brithday"
        at com.youc.beanutils.Demo01$1.convert(Demo01.java:48)
        at org.apache.commons.beanutils.ConvertUtilsBean.convert(ConvertUtilsBean.java:470)
        at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1004)
        at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:456)
        at com.youc.beanutils.Demo01.test2(Demo01.java:58)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
        at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.text.ParseException: Unparseable date: "brithday"
        at java.text.DateFormat.parse(DateFormat.java:337)
        at com.youc.beanutils.Demo01$1.convert(Demo01.java:46)
        ... 28 more

这是我要beanUtils的类

package com.youc.beanutils;

import java.util.Date;

/**
*
* 使用beanUtils操作javabean的属性(第三方jar包)
* @author zs
*
*/

public class Person {// javabean

        private String name; // 字段
        private String password; // 字段
        private int age; // 字段
        private Date brithday ;
       
        public Date getBrithday() {
                return brithday;
        }

        public void setBrithday(Date brithday) {
                this.brithday = brithday;
        }

        public String getAb(){
                return null;
        }
       
        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public String getPassword() {
                return password;
        }

        public void setPassword(String password) {
                this.password = password;
        }

        public int getAge() {
                return age;
        }

        public void setAge(int age) {
                this.age = age;
        }

}

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

3 个回复

倒序浏览
lily 黑马帝 2011-9-30 00:11:03
沙发
  1. BeanUtils.setProperty(p, "brithday", "brithday");
复制代码
Person类中,brithday定义为Date类型,那么上面这句语句怕是会报错!,
楼主调试中也 提示java.lang.RuntimeException: java.text.ParseException: Unparseable date: "brithday" ,可以先注释掉上面这句看看,另楼主的类中没有main函数,是运行不了的
[ 本帖最后由 lily 于 2011-09-30  00:12 编辑 ]
回复 使用道具 举报
黑马网友  发表于 2011-9-30 23:28:49
藤椅

回复 沙发 的帖子

呵呵 我的笔误 应该这样
BeanUtils.setProperty(p, "name", name);
                // 只支持8中基本数据类型的自动转换,这里自动转换了age的类型
                BeanUtils.setProperty(p, "age", age);
                BeanUtils.setProperty(p, "password", password);
                BeanUtils.setProperty(p, "brithday", brithday);
回复 使用道具 举报

  1. package com.youc.beanutils;

  2. import java.beans.Beans;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.text.ParseException;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Date;

  7. import org.apache.commons.beanutils.BeanUtils;
  8. import org.apache.commons.beanutils.ConversionException;
  9. import org.apache.commons.beanutils.ConvertUtils;
  10. import org.apache.commons.beanutils.Converter;
  11. import org.junit.Test;

  12. public class Demo01 {
  13.         @Test
  14.         public void test1() throws IllegalAccessException,
  15.                         InvocationTargetException {
  16.                 Person p = new Person();
  17.                 BeanUtils.setProperty(p, "name", "x***");
  18.                 System.out.println(p.getName());
  19.         }

  20.         @Test
  21.         public void test2() throws IllegalAccessException,
  22.                         InvocationTargetException {
  23.                 String name = "aaa";
  24.                 String password = "124";
  25.                 String age = "23";
  26.                 String brithday = "1989-09-09";

  27.                 ConvertUtils.register(new Converter() {
  28.                         public Object convert(Class type, Object value) {
  29.                                 if (value == null) {
  30.                                         return null;
  31.                                 }
  32.                                 if (!(value instanceof String)) {
  33.                                         throw new ConversionException("不是String类型不能成功转换");
  34.                                 }
  35.                                 String str = (String) value;
  36.                                 if (str.equals("")) {
  37.                                         return null;
  38.                                 }
  39.                                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  40.                                 try {
  41.                                         return sdf.parse(str);
  42.                                 } catch (ParseException e) {
  43.                                         throw new RuntimeException(e);
  44.                                 }
  45.                         }
  46.                 }, Date.class);

  47.                 Person p = new Person();
  48.                 BeanUtils.setProperty(p, "name", "name");
  49.                 // 只支持8中基本数据类型的自动转换,这里自动转换了age的类型
  50.                 BeanUtils.setProperty(p, "age", "age");
  51.                 BeanUtils.setProperty(p, "password", "password");
  52.                 BeanUtils.setProperty(p, "brithday", "brithday");

  53.                 System.out.println("姓名:" + p.getName());
  54.                 System.out.println("年龄:" + p.getAge());
  55.                 System.out.println("密码:" + p.getPassword());
  56.                 System.out.println("生日:" + p.get<font color="#ff0000">Brithday</font>());birthday字母写错了
  57.         }
  58. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马