从Servlet

时间:2017-12-12 15:29:07

标签: java json servlets

这个问题看似简单,但我还没有找到一个好的答案。我需要从Servlet向远程页面发送一个JSon结构(使用我目前正在开发的未指定的libretry构建)。

我对发送结构的最佳方式感兴趣。

我的意思是,在我的Servlet中,在doPost()事件中,我应该如何管理发送?

我在考虑两种情况:

try (PrintWriter out = response.getWriter()) {
   out.print(myJSon.toString(); // <- recursive function that overrides 
                                // toString() and returns the entire JSon 
                                // structure

} (...)

try (OutputStream os = response.getOutputStream()) {
   myJSon.write(os, StandardCharsets.UTF8); // <- function that 
// recursively writes chunk of my JSon structure 
// in a BufferWriter created inside the root write function
// forcing UTF-8 encoding

} (...)

或者不同的东西,如果有更好的approch。

请注意,JSon结构包含一个带有长文本字段(超过1000个字符的描述)的对象数组,因此它可能非常耗费内存。

为什么我没有使用标准的JSon libreries,因为我不了解它们,我也不知道我是否可以信任它们。而且我也不知道我是否能够在生产服务器上安装它们。

感谢您的回答。

2 个答案:

答案 0 :(得分:2)

从你的问题我看到多个要点:

  1. 如何发送您的JSon
  2. 你可以使用什么JSon库
  3. 如何在生产中使用库
  4. 如何发送您的JSon

    从你的代码中,这似乎是一个HTTP响应,而不是你的Servlet上的POST,所以你需要知道如何发送一个JSON字符串作为HTTP响应的正文

    您是使用Web服务器的框架还是手动处理所有内容?如果您使用框架,它通常会为您完成,只需传递JSON字符串

    如果您手动执行此操作:

    try (PrintWriter pw = response.getWriter()) {
       pw.write(myJson.toString());
    }
    

    try (OutputStream os = response.getOutputStream()) {
       os.write(myJson.toString().getBytes());
    }
    

    两者都有效,请参阅Writer or OutputStream?

    根据你的说法,你的JSON的大小不应该是重要的,它只是文本所以它不会大到重要。

    您可以使用哪些库

    Java有很多JSON库,主要是:

    转到你喜欢的那个,谷歌将有广泛的文档和资源

    如何在生产中使用

    如果您不确定是否能够在生产服务器上安装依赖项,则可以随时创建uber-jar(请参阅@ Premraj&#39;答案)

    基本上,您将依赖项捆绑在Jar

答案 1 :(得分:0)

使用Gson是发送json的好方法

Gson gson = new Gson();
String jsonData = gson.toJson(student);
PrintWriter out = response.getWriter();
try {
    out.println(jsonData);
} finally {
    out.close();
}

了解详情json response from servlet in java