如何将 Class 数据源转换为 JRDataSource

How to cast Class Data Source to JRDataSource

我有特定的 class 这样的:

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;
  }
}

这个class来自@RestController方,@RequestBody用JSON设置所有数据。我这里也用JPA。

@Service层我想使用testClass数据,到JasperFillManager.

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, ???);

fillReport 的 3. 参数需要 JRDataSource 类型的数据。但是我的对象不是JRDataSource。我怎样才能将它转换为 JRDataSource。有什么办法吗?

您不会将对象 转换为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
    }
}

由于 ListData (List<ListData>) 是您的 class,因此无需重新发明轮子,创建您自己的数据源。您可以只使用 JRBeanCollectionDataSource

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,  params, new JRBeanCollectionDataSource(getListData()));

您将自动获取jrxml中相对于ListData

中getters和setters的字段