gpt4 book ai didi

Java Web 服务器以 JSON 进行响应

转载 作者:行者123 更新时间:2023-12-02 12:22:14 24 4
gpt4 key购买 nike

我正在尝试创建一个简单的 Java Web 应用程序,它使用 JSON 字符串响应对/test 的 GET 请求。

我的环境是Java、Intellij和Tomcat 8.5.4。

到目前为止我已经上了 3 节课:

  • CSV - 用于 CSV 到 JSON 的转换
  • CleanUp - 实际转换数据的类
  • Servlet - 响应 GET 请求的类

我的 Servlet 类:

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

}
}

CleanUp 类当前将结果数据发送到控制台,如下所示:

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

我是个新手,甚至不确定我想要的内容是否可以作为 javax.http.servlet 的一部分完成,或者是否需要另一个依赖项?

最佳答案

您的解决方案无疑适合您,但将来您可能需要按如下方式更新它:

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());
...

正确设置内容类型将使 Javascript 更容易处理响应,而不会被浏览器破坏(因为您告诉它它是 HTML)。

其次,将 JSON 直接写入响应将提高 servlet 的可扩展性,因为它消除了您在 String 变量中创建的 JSON 的副本。如果您的 JSON 很短,这不会有太大区别,但想象一下如果 cleanupData 生成大量输出,例如当 list 包含 1000 个条目时。

关于Java Web 服务器以 JSON 进行响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45683913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com