2 回答

TA貢獻1843條經(jīng)驗 獲得超7個贊
我遇到了同樣的錯誤,瘋狂地修改了How to get response body in Zuul post filter? 中描述的代碼。嘗試不同的可能性。最后,我在這篇文章中找到了解決方案,方法是在OutputStream
fromservletResponse.getOutputStream()
而不是 中寫下答案ctx.setResponseDataStream()
:
HttpServletResponse servletResponse = ctx.getResponse();
...
String updatedResponse = jsonObj.toString();
try {
OutputStream outStream = servletResponse.getOutputStream();
outStream.write(updatedResponse.getBytes(), 0, updatedResponse.length());
outStream.flush();
outStream.close();
} catch (IOException e) {
log.warn("Error reading body", e);
}

TA貢獻1818條經(jīng)驗 獲得超3個贊
我有一個類似的任務(wù),并試圖通過寫入 OutputStream 來完成。這有效,但有一個奇怪的副作用,它使響應(yīng)中的 HttpHeaders 被刪除或損壞。這使得調(diào)用在生產(chǎn)中產(chǎn)生 CORS 錯誤,即使它通過 Postman 在本地運行良好。
我編寫了以下方法,我從我的 Post Zuul 過濾器的 run() 方法調(diào)用該方法以將單個節(jié)點/值添加到返回的 Json。
private void addJsonNode(RequestContext requestContext,String name, String id) {
HttpServletResponse servletResponse = requestContext.getResponse();
try {
final InputStream responseDataStream = requestContext.getResponseDataStream();
String responseData = CharStreams.toString(new InputStreamReader(responseDataStream, "UTF-8"));
JSONObject jsonObject = new JSONObject(responseData);
jsonObject.put(name, id);
String updatedResponse = jsonObject.toString(4);
requestContext.setResponseBody(updatedResponse);
} catch (IOException e) {
log.warn("Error reading body", e);
} catch (JSONException e) {
log.warn("Error reading body", e);
}
}
添加回答
舉報