在我的模型类中,我有一个类型为ArrayList
的私有字段,当我试图使用BeanUtils
获得ArrayList
时,它没有说没有这样的方法,有人可以解释为什么会发生这种情况吗?
代码如下:
public class ApplicationListDTO implements DTO {
private Integer count = null;
private String next = null;
private String previous = null;
private List<ApplicationInfoDTO> list = new ArrayList<ApplicationInfoDTO>();
private long lastUpdatedTime = 0L;
private long createdTime = 0L;
/**
* gets and sets the lastUpdatedTime for ApplicationListDTO
**/
@org.codehaus.jackson.annotate.JsonIgnore
public long getLastUpdatedTime(){
return lastUpdatedTime;
}
public void setLastUpdatedTime(long lastUpdatedTime){
this.lastUpdatedTime=lastUpdatedTime;
}
/**
* gets and sets the createdTime for a ApplicationListDTO
**/
@org.codehaus.jackson.annotate.JsonIgnore
public long getCreatedTime(){
return createdTime;
}
public void setCreatedTime(long createdTime){
this.createdTime=createdTime;
}
/**
* Number of applications returned.n
**/
@ApiModelProperty(value = "Number of applications returned.n")
@JsonProperty("count")
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
/**
* Link to the next subset of resources qualified.nEmpty if no more resources are to be returned.n
**/
@ApiModelProperty(value = "Link to the next subset of resources qualified.nEmpty if no more resources are to be returned.n")
@JsonProperty("next")
public String getNext() {
return next;
}
public void setNext(String next) {
this.next = next;
}
/**
* Link to the previous subset of resources qualified.nEmpty if current subset is the first subset returned.n
**/
@ApiModelProperty(value = "Link to the previous subset of resources qualified.nEmpty if current subset is the first subset returned.n")
@JsonProperty("previous")
public String getPrevious() {
return previous;
}
public void setPrevious(String previous) {
this.previous = previous;
}
/**
**/
@ApiModelProperty(value = "")
@JsonProperty("list")
public List<ApplicationInfoDTO> getList() {
return list;
}
public void setList(List<ApplicationInfoDTO> list) {
this.list = list;
}
}
,方法调用的代码如下:
Object object = ((ResponseImpl) message.getContent(List.class).get(0)).getEntity();
BeanUtils.getProperty(object,"list");
BeanUtils.getProperty(..)
返回String,所以它不是您需要的。
你可以在没有任何库支持的情况下完成:
try {
Object object = ((ResponseImpl) message.getContent(List.class).get(0)).getEntity();
Field field = object.getClass().getDeclaredField("list");
List<Object> list = field.get(object);
[...]
} catch (Exception e) {
e.printStackTrace();
}
或者您可以使用Apache Commons Lang库中的FieldUtils
来完成。下面是一个例子:
try {
Object object = ((ResponseImpl) message.getContent(List.class).get(0)).getEntity();
Field field = FieldUtils.getField(object.getClass(), "list", true);
List<Object> list = field.get(object);
[...]
} catch (Exception e) {
e.printStackTrace();
}