2017-08-14 6 views
0

JSON文字列を使用して/テストするGETリクエストで応答する単純なJava Webアプリケーションを作成しようとしています。JSONで応答するJava Webサーバー

私の環境はJava、Intellij、Tomcat 8.5.4です。

これまでのところ、私はすでに3つのクラスがあります。

  • CSV - CSVのためのJSONへの変換
  • クリーンアップ - GETに応答クラス - 実際にデータ
  • サーブレットに変換するクラスを要求

私のサーブレットクラス:

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 


@WebServlet(name = "Servlet") 
public class Servlet extends HttpServlet { 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

} 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    System.out.println("GET request received"); 
    CleanUp cleanup = new CleanUp(); 
    cleanup.cleanupData(); 

    // Logic needed here to send the data to client 

    } 
} 

クリーンアップクラスが現在のようにコンソールに結果のデータを送信します。

 ObjectMapper mapper = new ObjectMapper(); 
     mapper.enable(SerializationFeature.INDENT_OUTPUT); 
     mapper.writeValue(System.out, list); 

私は私が欲しいjavax.http.servletの一部として行うことができるか、別の依存関係が必要な場合でも、必ずfarily新しくはないのですか?

+0

あなたは応答が必要なGETリクエストを受け取りました。クライアントに返信するコンテンツタイプを決定する必要があります。データはResponse.getOutputStream()に書き込むことができます。そのテキストまたはHTMLの場合、他のライブラリは必要ありません。 –

+0

そのJSONなので、私はプレーンテキストとして扱うことができますか? doPostでは、Response.getOutPutStream(mapper.writeValue(System.out、list))を追加するだけで簡単です。 ? –

+0

はい、JSONオブジェクトをStringに変換すると、レスポンスに書き込むことができます。投稿された内容を気にしない場合、doPost()はdoGet()を呼び出すことができます。 –

答えて

1

あなたのソリューションは疑いがあなたのために動作しますが、将来的には、あなたが以下のようにそれを更新したいことがあります。

public class Cleanup { 
    ... 

    public void cleanupData(Writer output) { 
    ObjectMapper mapper = new ObjectMapper(); 
    mapper.enable(SerializationFeature.INDENT_OUTPUT); 
    mapper.writeValue(output, list); 
    } 

    ... 
} 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    System.out.println("Get Response"); 
    response.setContentType("application/json"); 
    ConvertCSV cleanup = new ConvertCSV(); 
    String outputData = cleanup.cleanupData(response.getWriter()); 
    ... 

コンテンツタイプを設定するctlyを使うと、Javascriptが(HTMLであると言っているので)ブラウザーが手を加えずに応答を処理しやすくなります。

JSONをレスポンスに直接書き込むと、String変数で作成しているJSONのコピーが不要になるため、サーブレットのスケーラビリティが向上します。これは、JSONが短い場合は大きな違いはありませんが、listに1000sのエントリが含まれている場合など、cleanupDataが大量の出力を生成しているとします。

0

答えは、最初に出力データをStringオブジェクトに格納することでした。

outputData = mapper.writeValueAsString(list); 

次にサーブレットで:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    System.out.println("Get Response"); 
    ConvertCSV cleanup = new ConvertCSV(); 
    String outputData = cleanup.cleanupData(); 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
    out.println(outputData); 
    out.close(); 
} 
関連する問題