2016-04-05 43 views
0

我想使一個Web服務器,使用數據庫來響應通過URI引入的某些查詢。Java HttpServer - ERR_CONTENT_LENGTH_MISMATCH

我的問題與HTTP處理程序有關。 Chrome返回ERR_CONTENT_LENGTH_MISMATCH。

我遵循Java文檔中的例子,理論上它應該起作用。 IE和Edge不顯示任何錯誤或文本。

請你看看,並告訴我是否有什麼問題?

下面是代碼:

private class QueryHandler implements HttpHandler { 

    private Map<String, String> parameters; 
    private String result; 
    private OutputStream os; 

    @Override 
    public void handle(HttpExchange exchange) throws IOException { 
     parameters = this.extractParameters(exchange.getRequestURI().getRawQuery()); 
     result = dbController.jsonQueryResponse(parameters.get("year"), parameters.get("day"), parameters.get("category")).toString(); 
     exchange.getResponseHeaders().set("Content-Type", "application/json; charset=UTF-32"); 
     exchange.sendResponseHeaders(200, result.getBytes("UTF-32").length); 
     os.write(result.getBytes("UTF-32")); 
     exchange.close(); 
    } 

    private Map<String, String> extractParameters(String query){ 
     Map<String, String> toBeReturned = new HashMap<>(); 

     for(String parameterValue : query.replaceFirst("\\?", "").split("&")){ 
      String[] parameter = parameterValue.split("="); 
      toBeReturned.put(parameter[0], parameter[1]); 
     } 

     return toBeReturned; 
    } 
} 

有趣的事實:

  • 邊緣讓我下載一個txt文件。
  • IE沒有。

謝謝!

+0

如果你提到的2個瀏覽器不顯示任何錯誤或文本,你會在哪裏看到ERR_CONTENT_LENGTH_MISMATCH? – f1sh

+0

您似乎發送了result.length()的內容長度,但這可能與result.getBytes()。length不同 - 取決於結果字符串的編碼和值,因此存在不匹配錯誤。因此,請將'result.getBytes()。length'作爲內容長度發送。 – wero

+0

@ f1sh請參閱修改。 –

回答

0

發現問題,我需要將內容類型設置爲application/json。

相關問題