サーブレットに投稿されたオブジェクトリテラルを抽出する必要があるコードを書いています。 HttpServletRequestオブジェクトのAPIを検討しましたが、Webページ上のフォーム要素から送信されないため、リクエストからJSONオブジェクトを取得する方法は明確ではありません。
どんな洞察も大歓迎です。
ありがとう。
これを探していますか?
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
StringBuilder sb = new StringBuilder();
BufferedReader reader = request.getReader();
try {
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append('\n');
}
} finally {
reader.close();
}
System.out.println(sb.toString());
}
最も簡単な方法は、BeanをReaderオブジェクトから移入することです。これは、1回の呼び出しで実行できます。
BufferedReader reader = request.getReader();
Gson gson = new Gson();
MyBean myBean = gson.fromJson(reader, MyBean.class);
jackson JSONプロセッサを利用する
ObjectMapper mapper = new ObjectMapper();
Book book = mapper.readValue(request.getInputStream(),Book.class);
org.Apache.commons.io.IOUtils
を使用してリクエストから文字列を抽出する別の方法があります
String jsonString = IOUtils.toString(request.getInputStream());
その後、あなたは何でもしたい、それをJSON
またはGson
などで他のオブジェクトに変換することができます。
JSONObject json = new JSONObject(jsonString);
MyObject myObject = new Gson().fromJson(jsonString, MyObject.class);
これは、Java 8 Stream APIを使用してHttpServletRequest
から要求データを取得する簡単な方法です。
String requestData = request.getReader().lines().collect(Collectors.joining());
リクエスト本文からデータを取得しようとしている場合、上記のコードは機能します。しかし、あなたは私と同じ問題を抱えていると思います。
本文のデータがJSON形式であり、Javaオブジェクトとして必要な場合は、自分で解析するか、 google-gsonのようなライブラリを使用する必要があります プロジェクトのWebサイトにあるドキュメントと例を参照して、使用方法を確認する必要があります。
取得したデータをリクエストオブジェクトからJSONオブジェクトに変換するには、google-gsonを使用します。
Gson gson = new Gson();
ABCClass c1 = gson.fromJson(data, ABCClass.class);
//ABC class is a class whose strcuture matches to the data variable retrieved