zoukankan      html  css  js  c++  java
  • BeanUtils java.lang.reflect.InvocationTargetException

    最近在使用BeanUtils 时出现了一个错误

    Exception in thread "main" java.lang.reflect.InvocationTargetException: Cannot set id
        at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1017)
        at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:456)
        at com.mizhanke.tpjob.Demo5.main(Demo5.java:68)
    Caused by: java.lang.NoSuchMethodException: Property 'id' has no setter method in class 'class com.mizhanke.tpjob.Emp'
        at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:2128)
        at org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1948)
        at org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:2054)
        at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1015)
        ... 2 more

    Demo5.java

    public class Demo5 {
    	public static void main(String[] args) throws Exception {
    		
    		String id = "100";
    		String name = "rose";
    		String salary = "1000";
    		
    		
    		/*
    		 * 如果不是基本数据类型(如:日期格式的字符串,Ojcect类型)  , 则不能自动转换,因为日期格式的字符串是有各种各样的格式
    		 * 
    		 * 
    		 * 解决方法:
    		 * 1.直接 new Date(2017, 2, 20)  对象
    		 * 2.注册一个类型转换器
    		 * 
    		 * 一般情况都是使用 方法1
    		 * 
    		 */
    		
    		//Date birthday = new SimpleDateFormat("yyyy-MM-dd").parse("2017-02-20");
    		
    		
    		String birthday = "2015-12-06";
    		ConvertUtils.register(new Converter() {
    			
    			@Override
    			public Object convert(Class type, Object value) {
    				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    				Date date = null;
    				try {
    					date = format.parse((String) value);
    				} catch (ParseException e) {
    					e.printStackTrace();
    				}
    				return date;
    			}
    		}, Date.class);
    		
    		
    		Emp emp = new Emp();
    		BeanUtils.setProperty(emp, "id", id);
    		BeanUtils.setProperty(emp, "name", name);
    		BeanUtils.setProperty(emp, "salary", salary);
    		BeanUtils.setProperty(emp, "birthday", birthday); 
    		
    		
    		System.out.println(emp);
    		
    	}
    }
    

    Emp.java

    class Emp {
    	private int id;
    	private String name;
    	private double salary;
    	private Date birthday;
    
    	public int getId() {
    		return id;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public double getSalary() {
    		return salary;
    	}
    
    	public void setSalary(double salary) {
    		this.salary = salary;
    	}
    
    	public Date getBirthday() {
    		return birthday;
    	}
    
    	public void setBirthday(Date birthday) {
    		this.birthday = birthday;
    	}
    
    	public Emp() {
    
    	}
    
    	public Emp(int id, String name, double salary, Date birthday) {
    		this.id = id;
    		this.name = name;
    		this.salary = salary;
    		this.birthday = birthday;
    	}
    
    	@Override
    	public String toString() {
    		return String.format("{id=%d,name=%s,salary=%s,birthday=%s}", id, name,salary,birthday);
    	}
    
    }
    

    通过和以前的代码对比发现:

    以前能运行的代码比  Emp.java  多了一个public 修改符,然后以Emp.java 加上了 public 修饰符就可以运行了。

    原因:可能是由于 BeanUtils 和 Emp  不在同一个包下面,所以访问不到。

  • 相关阅读:
    Java在Web开发语言上败给了PHP(转)
    很开心收到了Andreas Loew发给我的注册key
    Cocos2d-x开发移植到安卓平台横竖屏设置及相关
    学习实战二:利用Cocos2d-x写的第一个游戏
    Cocos2d-x项目移植到安卓平台易出现的错误
    cocos2d-x帧动画实现(写下备忘)
    cocos2d-x学习遇到的问题
    C++指针的管理
    Win7开自带的虚拟WIFI
    【SICP练习】21 练习1.27
  • 原文地址:https://www.cnblogs.com/cppwen/p/6429822.html
Copyright © 2011-2022 走看看