0
所以我現在有一種醜陋的情況。我有一個包含「getAllData」方法的類版本。該方法返回InputStream的Supplier。在Java中使用供應商流<InputStream>給予澤西島響應
public class Revision {
private String id;
private Supplier<InputStream> allData;
public Revision(String id, Supplier<InputStream> allData) {
this.id = id;
this.allData = allData;
}
public getAllData() {
return allData;
}
}
比方說,我有2個修訂。他們宣稱,像這樣:
Supplier<InputStream> revisionValue1 =() -> new ByteArrayInputStream(
"{\"name\":\"George\", \"state\":\"Colorado\", \"Exp\":\"lots\"}".getBytes());
Revision revision1 = new Revision("Id1", revisionValue1);
Supplier<InputStream> revisionValue2 =() -> new ByteArrayInputStream(
"{\"name\":\"Sean\", \"state\":\"New York\"}".getBytes());
Revision revision2 = new Revision("Id2", revisionValue2);
而且他們放入地圖成員:
Map<String, Revision> revisions = new HashMap<>();
revisions.put("Id1", revision1);
revisions.put("Id2", revision2);
電流的方法(這本身可能不是寫得很好)返回流:
public Stream<Revision> getRevisions() {
return revisions.values().stream();
}
現在在我的Jersey代碼中,我需要弄清楚如何將這些值作爲Json格式的響應返回。所以結果應該是這樣的:
[
{
"name": "George",
"state": "Colorado",
"Exp": "lots"
},
{
"name": "Sean",
"state": "New York"
}
]
我試圖做到這一點,即使作爲純文本,這是行不通的。我想要的是:
@Produces(MediaType.TEXT_PLAIN)
public Response getRevisions(...) {
Stream<Revision> revisionObjects = getRevisions();
// each Revision option has a getAllData() method that needs called, which returns Supplier<InputStream>
// each Supplier<InputStream> contains, essentially, a Json record
// attempt at creating a StreamingOutput that can be sent as a response
if (revisionObjects != null) {
StreamingOutput stream = os -> {
Writer writer = new OutputStreamWriter(os);
Iterator<Revision> revisionIterator = revisionObjects.iterator();
while (revisionIterator.hasNext()) {
Revision next = revisionIterator.next();
writer.write(next.getAllData().get().toString());
}
writer.flush();
};
return Response.ok(stream).build();
}
return Response.noContent().build();
}
這是返回結果一樣:
[email protected]@ba0b09
這我假設是因爲有需要是「的toString()」方法之前一個額外的步驟作家。
對不起,這是多久,我只是想提供的細節。有誰知道如何讓這個工作?理想情況下,我希望它能用JSON做出迴應,但即使是純文本也是一個巨大的進步。
P.S.我仍然試圖圍繞InputStreams和OutputStreams進行封裝,所以很有可能,我有一些不合邏輯的東西。
「getAllData()」位於修訂對象中,該對象是流中的單個元素。我將如何將getAllData()替換爲查看調用它的單個修訂版的東西? – user2869231
我編輯了這篇文章。這是你要求的嗎? – Sanj
revisionResponse包含我想要的值,這非常棒。不過,我現在正在收到一個服務器錯誤,我認爲它對於返回一個ArrayList作爲響應感到憤怒。在迴應中列出之前是否需要完成清單? – user2869231