Java Web服务器将使用JSON进行响应
我正在尝试创建一个简单的JavaWeb应用程序,它使用JSON字符串响应GET请求to/test 我的环境是Java、Intellij和Tomcat8.5.4 到目前为止,我已经上了3节课: CSV-用于CSV到JSON的转换 CleanUp-实际转换数据的类 Servlet—响应GET请求的类 我的Servlet类:Java Web服务器将使用JSON进行响应,java,json,http,servlets,Java,Json,Http,Servlets,我正在尝试创建一个简单的JavaWeb应用程序,它使用JSON字符串响应GET请求to/test 我的环境是Java、Intellij和Tomcat8.5.4 到目前为止,我已经上了3节课: CSV-用于CSV到JSON的转换 CleanUp-实际转换数据的类 Servlet—响应GET请求的类 我的Servlet类: import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import
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的一部分来完成,还是需要另一个依赖项?答案是首先将输出数据存储在字符串对象中
outputData = mapper.writeValueAsString(list);
然后在servlet中:
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();
}
您的解决方案无疑适合您,但将来您可能需要按如下方式更新它:
public class Cleanup {
...
public void cleanupData(Writer output) {
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.writeValue(output, list);
}
...
}
及
正确设置内容类型将使Javascript更容易处理响应,而不会被浏览器弄乱,因为您告诉它它的HTML
其次,将JSON直接写入响应将提高servlet的可伸缩性,因为它消除了在字符串变量中创建的JSON副本。如果您的JSON很短,这不会有多大区别,但是想象一下CleanUpdatea是否正在生成大量输出,例如当列表包含1000个条目时。因此您收到了需要响应的GET请求。您需要决定要发送回客户端的内容类型。数据可以写入Response.getOutputStream。如果它是文本或html,那么您不需要其他库。它是JSON,所以我可以将其视为纯文本?在doPost中,添加Response.getOutPutStreammapper.writeValueSystem.out,list;,是否与添加Response.getOutPutStreammapper.writeValueSystem.out一样简单?是的,如果将JSON对象转换为字符串,则可以写入响应。如果您不关心发布的内容,doPost可以调用doGet。但是system.out是否正确?我不再需要发送到控制台。您可以使用System.out将内容写入控制台…可能用于记录或调试信息。
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());
...