我有这样的特定课程:
public class testClass {
private String name;
private List<ListData> listDatas;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<ListData> getListData() {
return listData;
}
public void setListData(List<ListData> listData) {
this.listData = listData;
}
}
此类来自@RestController
侧,@RequestBody
使用JSON设置所有数据。我也在这里使用JPA。
在@Service
图层上,我想将testClass
数据用于JasperFillManager
。
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, ???);
fillReport的3.参数expect JRDataSource
数据类型。但我的目标不是JRDataSource
。如何将其投射到JRDataSource
。有什么办法吗?
答案 0 :(得分:3)
您没有将对象强制转换为JRDataSource
,因为它们彼此之间并不是多态的。相反,您需要编写访问数据的JRDataSource
实现。像这样:
public class MyJRDataSource implements JRDataSource {
private final testClass data;
public MyJRDataSource(testClass data) {
this.data = data;
}
@Override
Object getFieldValue(JRField field) {
// get value of field here
}
@Override
boolean next() {
// move to next row of data
}
}
答案 1 :(得分:3)
由于ListData
(List<ListData>
)是你的一类,因此无需重新发明轮子,创建自己的数据源。您可以使用JRBeanCollectionDataSource
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, new JRBeanCollectionDataSource(getListData()));
您将自动获取jrxml中相对于ListData