2016-04-05 24 views
0

URI aracılığıyla sunulan belirli sorgular için bir veritabanı kullanan bir web sunucusu yapmaya çalışıyorum.Java HttpServer - ERR_CONTENT_LENGTH_MISMATCH

Sahip olduğum sorun, HTTP İşleyici ile ilgilidir. Chrome, ERR_CONTENT_LENGTH_MISMATCH değerini döndürür.

Örneği Java belgelerinden takip ettim ve teorik olarak çalışması gerekir. IE ve Edge herhangi bir hata veya metin göstermiyor.

Lütfen bir göz atın ve bir sorun olup olmadığını bana söyler misiniz?

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; 
    } 
} 

İlginç gerçekler:

  • Kenar bana bir txt dosyasını indirmek yapar İşte

    kodudur.
  • IE bunu yapmaz.

Teşekkür ederiz!

+0

Belirtilen 2 tarayıcıda herhangi bir hata veya metin görüntülenmiyorsa ERR_CONTENT_LENGTH_MISMATCH öğesini nerede görüyorsunuz? – f1sh

+0

'result.length() 'adlı bir içerik uzunluğunu gönderiyor gibi görünüyorsunuz, ancak bu, sonuç dizesinin kodlama ve değerine bağlı olarak result.getBytes(). Length' değerinden farklı olabilir, dolayısıyla yanlış eşleşme hatası. Bunun yerine, result.getBytes(). Length 'yerine içerik uzunluğu olarak gönderin. – wero

+0

@ f1sh Lütfen düzenlemeleri okuyun. –

cevap

0

Sorun bulundu, içerik türünü application/json olarak ayarladım.