私が見つけたすべてのコードを2日間検索し、テストしました。 jsonファイルをサーブレットに送信しています。データが正しく送信されていることを確認しています。私は何らかの理由でリクエストの入力ストリームからそれらを取得できません。JSONデータをサーブレットに送信するとヌル文字列になる
ここデータの送信者からのコード:
{
...
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();
...
}
サーブレットからコード:私はまだ見つかっていない
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()はnullになります値は、sbが空の文字列であるためです。デバッグから私は、要求の入力ストリームのbuf値が空ではないように見えます(少なくとも、そこにはいくつかのバイトデータがあり、送信者のデータ出力ライターと同じであると思われます)。
私が逃したエラーを見ましたか?サーブレットに到達する前にデータをチェックすることはできますか(おそらくエンコーディングはどこかで失敗します)?
アドバイス/アイデアはありますか?
はOutputStreamに何も書き込みがありません、あなたは
?私は書き込みを参照してください。 – stdunbar
私が間違っていない場合、wr.writeBytes(URLEncoder.encode(jsonString、 "UTF-8"))でなければなりません。 –
改行文字が書かれた後にあなたのJSON文字列に魔法のように追加されたと思いますか? –