我正在尝试在映射中获取以下实体的属性:
@Entity
@Table(name = "ps_parameter")
@NamedQueries({Named Queries Here..})
public class PSParameter
implements Serializable
{
//~ Static variables/initializers ----------------------------------------------------
....
//~ Instance variables ---------------------------------------------------------------
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "paramValue", nullable = false)
private String paramValue;
//~ Constructors ---------------------------------------------------------------------
....
//~ Methods --------------------------------------------------------------------------
public Double getDoubleValue()
{
return Double.parseDouble(getParamValue());
}
public Integer getIntegerValue()
{
return Integer.parseInt(getParamValue());
}
....
}
通过以下方式:
....
try
{
Map propertiesCurrentObject = BeanUtils.describe(currentObject);
....
}
....
显然currentObject
是一个PSParameter..
每当调用 describe
函数时,我都会收到 InitationTargetException
:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:2170)
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1332)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:770)
at org.apache.commons.beanutils.BeanUtilsBean.getNestedProperty(BeanUtilsBean.java:715)
at org.apache.commons.beanutils.BeanUtilsBean.getProperty(BeanUtilsBean.java:741)
at org.apache.commons.beanutils.BeanUtilsBean.describe(BeanUtilsBean.java:514)
at org.apache.commons.beanutils.BeanUtils.describe(BeanUtils.java:185)
at xxx.yyy.ejb.core.facade.AuditEntryFacade.getChangesBetweenTwoObjects(AuditEntryFacade.java:1198)
....
其根本原因如下:
Caused by: java.lang.NumberFormatException: For input string: "true"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:481)
at java.lang.Integer.parseInt(Integer.java:514)
at xxx.yyy.ejb.core.entity.PSParameter.getIntegerValue(PSParameter.java:169)
... 87 more
有任何提示为什么会发生这种情况吗?我的意思是,我很清楚异常的根本原因,即无法将字符串解析为整数,但是为什么 BeanUtils 及其 describe 会这样做呢?
有什么办法可以避免这个问题,或者有其他选择吗?谢谢!
最佳答案
来自Javadoc :
Return the entire set of properties for which the specified bean provides a read method. This map contains the to String converted property values for all properties for which a read method is provided
这意味着describe()
方法返回给定bean的从属性到属性值的映射,调用getter来获取后者。这意味着当调用 describe()
时,您的 getter 都不应该抛出异常。
关于java - BeanUtils - 'describe' 方法返回 InitationTargetException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5707696/