1. 簡介
在本快速教程中,我們將創建一個小型 Web 應用程序,並探索如何從 Servlet 返回 JSON 響應。
2. Maven
對於我們的Web應用程序,我們將包含 jakarta.servlet-api 和 Gson 依賴項在我們的 pom.xml 中:
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>${jakarta.servlet.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
最新的依賴項可以在這裏找到:jakarta.servlet-api 和 gson。
我們還需要配置一個 Servlet 容器來部署我們的應用程序。 這篇文章是關於如何在 Tomcat 上部署 WAR 包的良好起點。
3. 創建實體
讓我們創建一個名為 Employee 的實體,該實體稍後將由 Servlet 以 JSON 格式返回:
public class Employee {
private int id;
private String name;
private String department;
private long salary;
// constructors
// standard getters and setters.
}4. 對象轉 JSON
為了從 Servlet 發送 JSON 響應,我們首先需要將 Employee 對象轉換為其 JSON 格式的表示形式。
有許多 Java 庫可用於將對象轉換為其 JSON 表示形式(及反之)。其中最突出的包括 Gson 和 Jackson 庫。要了解 Gson 和 Jackson 之間的差異,請參閲這篇文章。
以下是使用 Gson 將對象轉換為 JSON 表示形式的快速示例:
String employeeJsonString = new Gson().toJson(employee);5. 響應與內容類型
對於 HTTP Servlet,填充響應的正確流程如下:
- 檢索響應輸出流
- 填充響應頭
- 將內容寫入輸出流
- 提交響應
在響應中,<em >Content-Type</em> 頭告訴客户端返回內容的實際內容類型。
對於生成 JSON 響應,內容類型應設置為 <em >application/json</em>。
PrintWriter out = response.getWriter();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out.print(employeeJsonString);
out.flush();響應頭必須始終在提交響應之前設置。Web容器會忽略在響應提交後嘗試設置或添加任何頭部的嘗試。
調用 flush() 方法對 PrintWriter 進行調用會提交響應。
6. 示例 Servlet
現在讓我們來看一個返回 JSON 響應的示例 Servlet:
@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. 結論
本文介紹瞭如何從 Servlet 返回 JSON 響應。這在利用 Servlet 實現 RESTful 服務,並應用於 Web 應用程序時非常有用。