我的Repository类从数据库读取并持久存储数据,它有两种方法:
public InputStream findXmlResponse(ID id) {
Entity entity = (Entity) entityManager
.createQuery("SELECT e FROM Entity e WHERE e.id = :id")
.setParameter("id", iid)
.getSingleResult();
return new ByteArrayInputStream(entity.getReportFile().getBytes(StandardCharsets.UTF_8));
}
public String findXmlResponseDif(ID id) {
Entityentity = (Entity ) entityManager
.createQuery("SELECT e FROM Entitye WHERE e.id = :id")
.setParameter("id", id)
.getSingleResult();
return entity.getReportFile();
}
我想创建一个新的对象ResultObject,它将从这两个方法中返回(而不是两个,只有一个):
public ResultObject findXmlResponseUni(ID id) {
Entity entity = (Entity ) entityManager
.createQuery("SELECT e FROM Entity e WHERE e.id = :id")
.setParameter("id", id)
.getSingleResult();
return new ResultObject ;
}
我尝试过:
@Getter
public class ResultObject extends InputStream {
@EJB
private Repository repository;
private final String xmlResult;
public ResultObject() {
xmlResult = null;
}
@Override
public int read() throws IOException {
return 0;
}
public InputStream resultAsInput(ID id) {
InputStream xmlResult = repository.findXmlResponseUni(id);
return xmlResult;
}
public String resultAsString(ID id) {
String xmlResult = String.valueOf(repository.findXmlResponseUni(id));
return xmlResult;
}
}
稍后,我想在其他类中将它用作String:
public String pullxml() {
return String.valueOf(repository.findXmlResponseUni();
或作为输入:
public Display create(ID id) {
InputStream xmlResult = repository.findXmlResponseUni(id);
return prepare(xmlResult);
}
但是在构建项目时遇到了一些错误。我想知道我应该在哪里申请 ByteArrayInputStream(entity.getReportFile()。getBytes(StandardCharsets.UTF_8));
将返回的值转换为InputStream-在ResultObject中还是在将使用Input作为结果的类中? ResultObject应该扩展InputStream吗?使用此类对象并将其进一步传递的最有效方法是什么?