我已經搜索並測試了2天每個我找到的代碼,絕對沒有運氣。 我正在發送一個json文件到一個servlet,並且我非常肯定數據是正確發送的;出於某種原因,我無法從請求的輸入流中獲取它們。發送JSON數據到servlet結果爲空字符串
這裏從數據發送方的代碼:
{
...
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", "Mozilla/5.0");
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
Gson gson = new Gson();
String jsonString = gson.toJson(<POJO_to_send>).toString();
wr.writeBytes(URLEncoder.encode(jsonString,"UTF-8"));
wr.flush();
wr.close();
String responseMessage = con.getResponseMessage();
...
}
從servlet代碼:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String s = "";
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
while((s=br.readLine())!=null) {
s = br.readLine();
sb.append(s);
}
String jsonString = sb.toString();
if (jsonString != null) {
jsonString = br.readLine();
}else{
IOException ioex = new IOException("Error reading data.");
throw(ioex);
}
}
出於某種原因,我還沒有找到,sb.toString()導致空值,因爲sb是一個空字符串。從調試中我發現請求的輸入流的buf值似乎不是空的(至少有一些字節數據在它裏面,在我看來它們和發送者的數據輸出寫者是一樣的)。
您是否看到我錯過的一些錯誤?我可以在數據發送到servlet之前檢查數據嗎(也許編碼失敗了)?
任何建議/想法?
謝謝
你在哪裏發送數據?我看不到寫。 – stdunbar
應該是wr.writeBytes(URLEncoder.encode(jsonString,「UTF-8」)),如果我沒有錯的話。 –
是什麼讓你認爲一個換行符在寫完之後奇蹟般地附加到了你的JSON字符串中? –