簡體   English   中英

無法讀取格式為application / json的整個POST請求正文內容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM