web-dev-qa-db-ja.com

HttpServletRequestからJSONオブジェクトリテラルを取得する

サーブレットに投稿されたオブジェクトリテラルを抽出する必要があるコードを書いています。 HttpServletRequestオブジェクトのAPIを検討しましたが、Webページ上のフォーム要素から送信されないため、リクエストからJSONオブジェクトを取得する方法は明確ではありません。

どんな洞察も大歓迎です。

ありがとう。

49
DarthMaul

これを探していますか?

@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());
}
59
user305224

最も簡単な方法は、BeanをReaderオブジェクトから移入することです。これは、1回の呼び出しで実行できます。

BufferedReader reader = request.getReader();
Gson gson = new Gson();

MyBean myBean = gson.fromJson(reader, MyBean.class);
27
Edd

jackson JSONプロセッサを利用する

 ObjectMapper mapper = new ObjectMapper();
  Book book = mapper.readValue(request.getInputStream(),Book.class);
22
Clyde D'Cruz

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);
17
xedo

これは、Java 8 Stream APIを使用してHttpServletRequestから要求データを取得する簡単な方法です。

String requestData = request.getReader().lines().collect(Collectors.joining());
8
Dmitry Stolbov

リクエスト本文からデータを取得しようとしている場合、上記のコードは機能します。しかし、あなたは私と同じ問題を抱えていると思います。

本文のデータがJSON形式であり、Javaオブジェクトとして必要な場合は、自分で解析するか、 google-gsonのようなライブラリを使用する必要があります プロジェクトのWebサイトにあるドキュメントと例を参照して、使用方法を確認する必要があります。

5
arunjitsingh

取得したデータをリクエストオブジェクトから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
0
Ashok