Mengembalikan Respons JSON dari Servlet

1. Pengenalan

Dalam tutorial ringkas ini, kami akan membuat aplikasi web kecil dan meneroka cara mengembalikan respons JSON dari Servlet .

2. Maven

Untuk aplikasi web kami, kami akan memasukkan pergantungan javax.servlet-api dan Gson dalam pom.xml kami :

 javax.servlet javax.servlet-api ${javax.servlet.version}   com.google.code.gson gson ${gson.version}  

Versi ketergantungan terkini boleh didapati di sini: javax.servlet-api dan gson.

Kita juga perlu mengkonfigurasi wadah Servlet untuk menyebarkan aplikasi kita ke. Artikel ini adalah tempat yang baik untuk memulakan cara menggunakan PERANG di Tomcat.

3. Membentuk Entiti

Mari buat entiti Pekerja yang kemudiannya akan dikembalikan dari Servlet sebagai JSON:

public class Employee { private int id; private String name; private String department; private long salary; // constructors // standard getters and setters. }

4. Entiti ke JSON

Untuk menghantar respons JSON dari Servlet, pertama kita perlu menukar objek Karyawan menjadi representasi JSONnya .

Terdapat banyak perpustakaan java yang tersedia untuk menukar objek ke perwakilan JSON di sana dan sebaliknya. Yang paling terkenal adalah perpustakaan Gson dan Jackson. Untuk mengetahui perbezaan antara GSON dan Jackson, lihat artikel ini.

Contoh cepat untuk menukar objek ke representasi JSON dengan Gson adalah:

String employeeJsonString = new Gson().toJson(employee);

5. Jenis Respons dan Isi

Untuk Servlet HTTP, prosedur yang betul untuk mengisi respons:

  1. Dapatkan aliran output dari tindak balas
  2. Isi tajuk respons
  3. Tulis kandungan ke aliran output
  4. Lakukan tindak balas

Sebagai tindak balas, tajuk Jenis Kandungan memberitahu pelanggan apa jenis kandungan kandungan yang dikembalikan sebenarnya.

Untuk menghasilkan respons JSON jenis kandungan mestilah aplikasi / json:

PrintWriter out = response.getWriter(); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); out.print(employeeJsonString); out.flush();

Tajuk respons mesti selalu ditetapkan sebelum tindak balas dilakukan. Wadah web akan mengabaikan sebarang percubaan untuk menetapkan atau menambahkan tajuk setelah respons dilakukan.

Calling flush () pada PrintWriter memberikan tindak balas.

6. Contoh Servlet

Sekarang mari kita lihat contoh Servlet yang mengembalikan respons JSON:

@WebServlet(name = "EmployeeServlet", urlPatterns = "/employeeServlet") public class EmployeeServlet extends HttpServlet { private Gson gson = new Gson(); @Override protected void doGet( HttpServletRequest request, HttpServletResponse response) throws IOException { Employee employee = new Employee(1, "Karan", "IT", 5000); String employeeJsonString = this.gson.toJson(employee); PrintWriter out = response.getWriter(); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); out.print(employeeJsonString); out.flush(); } }

7. Kesimpulannya

Artikel ini menunjukkan cara mengembalikan respons JSON dari Servlet. Ini berguna dalam aplikasi web yang menggunakan Servlets untuk melaksanakan REST Services.

Semua sampel kod yang ditunjukkan di sini boleh didapati di GitHub.