2017-08-14 111 views
0

我想创建一个简单的Java Web应用程序响应GET请求/用JSON字符串测试。Java Web服务器响应与JSON

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

到目前为止,我有3个班已经:

  • CSV - 为CSV以JSON转换
  • 清理 - 一类实际上转换数据
  • 的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 

    } 
} 

清理阶级当前并将所得的数据来安慰一样:

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

我farily新甚至不知道如果我想什么可以做的javax.http.servlet的一部分或需要其他的依赖?

+0

因此,您收到了需要回复的GET请求。您需要决定要将内容类型发送回客户端。数据可以写入Response.getOutputStream()。如果它的文本或HTML,那么你不需要其他库。 –

+0

它的JSON,所以我可以把它作为纯文本? 在doPost中就像添加Response.getOutPutStream(mapper.writeValue(System.out,list))一样简单; ? –

+0

是的,如果您将JSON对象转换为String,则可以写入响应。如果你不关心发布的内容,你的doPost()可以调用doGet()。 –

回答

1

您的解决方案无疑为你的作品,但在未来,你可能需要如下更新:

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个条目。

0

答案是将输出数据首先存储在一个String对象中;

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