[英]Unable to read entire POST request body content formatted as application/json
我在Jetty處理application/json
格式的請求正文數據時遇到了問題。 本質上,當請求主體由Jetty處理時,請求數據將被切斷。
我有大約74,000個字節的相對較大的POST正文。 根據我在網上找到的一些建議,我實例化了一個新的上下文處理程序,並將setMaxFormContentSize
屬性設置為足夠大的500,000字節大小。
ServletContextHandler handler = new ServletContextHandler(server, "/");
handler.setMaxFormContentSize(500000);
但是,這似乎無法正常工作。 我還在線閱讀了該屬性僅適用於表單編碼數據,而不application/json
,這是我們應用程序的嚴格要求。
有什么辦法可以避免這個問題? 是否可以子類化一些特殊的約束類,以使處理大小增加到至少500KB?
編輯#1:我應該補充一點,我還嘗試將限制的大小減小到5個字節,以查看它是否會切斷有效負載中的更多數據。 這也沒有用,這似乎暗示着肯定完全忽略了該屬性。
編輯2:在這里,我從請求流中讀取信息。
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
String json = CharStreams.toString(new InputStreamReader(req.getInputStream()));
....
} catch (Exception e) {
logger.error("Exception in internal api forwarder", e);
throw e;
}
}
這似乎是從請求流中讀取的一種標准方式。 我還嘗試過使用req.getReader()
的BufferedReader
進行同樣的操作。
維維克
這個CharStreams
對象是什么?
它似乎不知道,不在乎或不尊重請求字符編碼。 (餿主意)
建議您使用servlet request.getReader()
而不是request.getInputStream()
(它實際上僅適用於二進制請求正文內容)
使用request.getReader()
至少將正確支持您的請求字符編碼。
您可能需要查看的另一點信息是request.getContentLength()
並驗證請求標頭確實包含所需的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.