【问题标题】:Convert ArrayList to json object将 ArrayList 转换为 json 对象
【发布时间】:2015-07-16 06:43:36
【问题描述】:

我在数据库中有一个表 testemployee 和三列 eid,ename,esalary。我想在 json 对象中显示表的所有行(稍后我想使用 kendo UI 网格为 json obj 提供一个 html 视图)我使用arraylist 存储所有数据行,然后将列表转换为 json。但是当我运行文件时,它显示 HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET
下面是我的代码

  package com.JSONoflist;

  import com.google.gson.Gson;

  import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;

import java.sql.ResultSet;
import java.sql.SQLException;

import java.sql.Statement;

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.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONObject;

@WebServlet(urlPatterns = {"/list2json"})

public class list2json extends HttpServlet {

protected void processRequest(HttpServletRequest request,     HttpServletResponse response) throws IOException {
       response.setContentType("text/html;charset=UTF-8");

    PrintWriter out = response.getWriter();

    Statement stmt = null;

     ResultSet rs = null;
    dbconn Obj = new dbconn();
    Connection connection = Obj.Open();
       try {

      String qry = "SELECT * FROM testemployee";
        stmt = connection.createStatement();
        rs = stmt.executeQuery(qry);

      JSONObject jObj = new JSONObject();
         ArrayList<Employee> list = new ArrayList<Employee>();
         Employee sPojo = null;
         while (rs.next()) {
          sPojo = new Employee();
          sPojo.setId(rs.getString("eid"));
         sPojo.setEname(rs.getString("ename"));
          sPojo.setSalary(rs.getString("esalary"));
          list.add(sPojo);
       }
       //  String json = new Gson().toJson(list);
        System.out.println(list);
        jObj.put("testemployee", list);
       System.out.println(jObj.toString());
    } catch (Exception ex) {
      ex.printStackTrace();
   }
}

}

我也尝试在 Arraylist 中使用静态值,但 http 错误。我错过了什么吗?请帮助我。由于这个错误,我什至无法检查 json 是否在 url 中显示数据库值。

@WebServlet(urlPatterns = {"/list2json"})
public class list2json extends HttpServlet 
{

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

   try {
      List<String> foo = new ArrayList<String>();
      foo.add("A");
       foo.add("B");
      foo.add("C");

      String json = new Gson().toJson(foo);

    } catch (Exception ex) {
      ex.printStackTrace();
   }
}

}

【问题讨论】:

  • 非常感谢,但列表没有显示.. 你能帮我解决这个问题吗?

标签: java json arraylist


【解决方案1】:

只需将您的 servlet 代码重写为

@WebServlet(urlPatterns = {"/list2json"})
public class list2json extends HttpServlet 
{

   @Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

   try {
      List<String> foo = new ArrayList<String>();
      foo.add("A");
       foo.add("B");
      foo.add("C");

      String json = new Gson().toJson(foo);

    } catch (Exception ex) {
      ex.printStackTrace();
   }
}

【讨论】:

    【解决方案2】:

    The documentation for HttpServlet 明确了在期望特定 HTTP 方法时要使用哪些函数。

    • doGet 用于 GET 请求。
    • doPost 用于 POST 请求。
    • doPut 用于 PUT 请求,并且
    • doDelete 用于 DELETE 请求。

    您的方法需要覆盖其中一个方法才能注册有效的 HTTP 方法。

    【讨论】:

      【解决方案3】:

      将此方法添加到您的 servlet。 您需要从 HttpServlet 重写方法 doGet 以处理 GET 请求。

      protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
         processRequest(request, response); 
      } 
      

      【讨论】:

      • 好吧,您需要发送格式为 kendo ui grid 期望的 json。检查这个文档docs.telerik.com/kendo-ui/web/grid/data-binding,看看你的 json 应该是什么样子。
      • 但是json值没有显示在我的url中。它无法获取json中的数据库数据。首先我必须从数据库中读取数据
      【解决方案4】:

      使用以下模式:

      ArrayList<String> myList = Array.asList(myArray);
      myList.add(foo);
      myList.add(bar);
      JsonArray jsonArray = new JsonArray(myList);
      

      【讨论】:

        【解决方案5】:

        尝试重命名 :-

        protected void processRequest(HttpServletRequest request, HttpServletResponse response)

        protected void doGet(HttpServletRequest request, HttpServletResponse response)

        我们需要为 get/post 请求覆盖 ​​doGet()/doPost(),否则它将调用默认的 doGet()/doPost() 方法,该方法具有以下输出的功能:-

        HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET

        了解更多关于 Servlet here

        要打印列表,请执行以下操作:-

        protected void doGet(HttpServletRequest request,
                    HttpServletResponse response) throws IOException {
                response.setContentType("text/html;charset=UTF-8");
                PrintWriter out = response.getWriter();
        
                try {
                    List<String> foo = new ArrayList<String>();
                    foo.add("A");
                    foo.add("B");
                    foo.add("C");
        
                    String json = foo.toString();
                    out.print(json);
        
                } catch (Exception ex) {
                    ex.printStackTrace();
                    out.print(ex.getMessage());
                }
            }
        

        对于打印/输出,您需要使用out 对象的print(),例如out.print(json)

        【讨论】:

        • @Sarah5 试试上面的编辑代码。利用out对象
        • 我尝试了.print 方法..但数据库值未显示静态值显示但数据库值未显示
        • @Sarah5 你在获取数据库值时一定做错了什么。我只是告诉你如何将值发送到输出。
        猜你喜欢
        • 2014-08-28
        • 1970-01-01
        • 2020-10-29
        • 2013-10-16
        • 2016-02-02
        • 1970-01-01
        • 1970-01-01
        • 2014-01-15
        • 2018-03-27
        相关资源
        最近更新 更多