【问题标题】:Fetching JSON object from Servlet Java从 Servlet Java 中获取 JSON 对象
【发布时间】:2012-11-26 21:49:47
【问题描述】:

我想创建一个应用程序,它会从 servlet 获取 JSON 对象以反序列化它,然后使用它的变量来做其他事情。

我的 servlet 在 doPost 中有以下代码:

 protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

      ObjectOutputStream os;
      os = new ObjectOutputStream(response.getOutputStream());

      String s = new String("A String");

      Gson gson = new Gson();
      String gsonObject= gson.toJson(s);

      os.writeObject(gsonObject);
      os.close();

    }

现在,当 servlet 运行时,我可以通过浏览器访问它,如果我在 doGet 方法中发布相同的代码,那将下载一个 servlet 文件,这不是我想要的。

我应该在我的第二个应用程序中使用什么来连接到 servlet,获取对象,以便我以后可以操作它?

提前致谢。

【问题讨论】:

  • 你的第二个申请是什么?渲染 html 页面或从 Java 代码读取和处理?

标签: java json servlets post gson


【解决方案1】:

如果它下载 servlet 文件而不是在浏览器中显示它,很可能您没有在响应中设置内容类型。如果您正在编写 JSON 字符串作为 servlet 响应,则必须使用

response.setContentType("text/html");
response.getWriter().write(json);

请注意顺序,它的“text/html”而不是“html/text”

【讨论】:

    【解决方案2】:

    您需要对 servlet 进行一些更改:

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
       String s = new String("A String");
     String json = new Gson().toJson(s);
     this.response.setContentType("application/json");
     this.response.setCharacterEncoding("UTF-8");
     Writer writer = null;
     try {
            writer = this.response.getWriter();
            writer.write(json);
     } finally {
        try {
            writer.close();
        } 
        catch (IOException ex) {
        }
     }
    }
    

    【讨论】:

    • 非常感谢,并没有完全解决我的问题,但它帮助了很多,并且确实让它发挥了作用。
    【解决方案3】:

    如果我正确理解了这个问题,那么您可以使用 java.net.HttpURLConnectionjava.net.URL 对象来创建与此 servlet 的连接,并在您的第二个 servlet 中读取上述 JSON servlet 流式传输的 JSON。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 2011-01-01
      • 2017-05-20
      • 1970-01-01
      • 2014-10-16
      • 2019-03-17
      相关资源
      最近更新 更多