1. 简介
在本快速教程中,我们将创建一个小型Web应用程序并探讨如何从Servlet返回JSON响应。
2. Maven
对于我们的Web应用程序,我们将在pom.xml中包含jakarta.servlet-api和Gson依赖:
<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实体,稍后它将以JSON格式从Servlet返回:
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,填充响应的正确过程是:
- 从响应中检索输出流
- 填写响应头
- 将内容写入输出流
- 提交响应
在响应中,Content-Type标头告诉客户端返回内容的实际内容类型。
为了生成JSON响应,内容类型应该是application/json:
PrintWriter out = response.getWriter();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out.print(employeeJsonString);
out.flush();
响应标头必须始终在提交响应之前设置,Web容器将忽略提交响应后设置或添加标头的任何尝试。
在PrintWriter上调用flush()提交响应。
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实现REST服务的Web应用程序很有帮助。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章
