【问题标题】:How to retrieve the result as JSON Arrray format in REST Response如何在 REST 响应中以 JSON 数组格式检索结果
【发布时间】:2018-01-25 00:54:38
【问题描述】:

我正在尝试从数据库中检索数据并将它们作为 JSON 数组返回到“响应”中。 但现在我在浏览器中得到如下结果,这不是正确的 JSON 数组格式。如何以 JSON 数组的形式接收数据?

{"{\n  \"id\": 14,\n  \"name\": \"Test Doom Post\",\n  \"email\": \"test@test1.com\...

JDK 1.7 泽西岛 (jaxrs-ri-2.25.1) 格森

//下面是我的Get方法:

@Path("/register")
public class JSONService {
    @GET
    @Path("/get")
    @Produces("application/json")
    @Consumes("application/json")
    public Response getRegisterInJSON() {

    JSONObject requestedJSON = new JSONObject();

    try {
        Class.forName("com.mysql.jdbc.Driver");
        SoccerUtils dbConnection = new SoccerUtils();
        Connection conn = dbConnection.getWeekendDBConnection();    

        PreparedStatement stmt = conn.prepareStatement("SELECT ID, FIRST_NAME, EMAIL FROM mycoolmap.weekendsoccer_login");
        ResultSet rs = stmt.executeQuery();
        while(rs.next())
        {
        RegisterPlayer playerObj = new RegisterPlayer();
            playerObj.setId(rs.getInt("ID"));
            playerObj.setName(rs.getString("FIRST_NAME"));
            playerObj.setEmail(rs.getString("EMAIL"));          

            Gson gson = new GsonBuilder().setPrettyPrinting().create();     
            String json1 = gson.toJson(playerObj);
            requestedJSON.put(json1, json1);            
            System.out.println(requestedJSON);                      

        }       



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

       } finally {

       }

       return Response.status(Status.OK).entity(requestedJSON.toString()).build();


    }

//注册Player POJO类:

@XmlRootElement
public class RegisterPlayer implements Serializable {
    private int id;
    private String name;
    private String email;   


    public RegisterPlayer() {

    }

    public RegisterPlayer(int id, String name, String email)
    {
    super();

    this.id =id;    
    this.name = name;
    this.email = email; 

    }

    public int getId()
    {
    return id;
    }

    public void setId(int id)
    {   
    this.id =id;        
    }
    public String getName()
    {
    return name;
    }

    public void setName(String name)
    {
    this.name = name;
    }

    public String getEmail()
    {
    return email;
    }

    public void setEmail(String email)
    {
    this.email = email;
    }


    @Override
    public String toString() {
        return "RegisterPlayer[id=" + id +", name=" + name +", email="+ email +"]";
    }



}

【问题讨论】:

  • 将对象添加到数组以返回数组。
  • @RomanC:我按照你的 cmets 做了,而且成功了!
  • 太棒了!如果您知道json对象和Json数组之间的区别,您可以回答您的问题。

标签: java json web-services jersey


【解决方案1】:

正如 Roman 在上述评论中所建议的,我创建了一个列表,添加对象并返回列表。它按预期工作。

/Created a 'registerPlayerList'  List 
     List<RegisterPlayer> registerPlayerList = new ArrayList<RegisterPlayer>();
    //  Intialiaze the RegisterPlayer class
            RegisterPlayer playerObj = new RegisterPlayer();
    //set all the values into the object        
            playerObj.setId(rs.getInt("ID"));
            playerObj.setName(rs.getString("FIRST_NAME"));
            playerObj.setEmail(rs.getString("EMAIL"));
            ......
    //add the playerObj to the created registerPlayerList
            registerPlayerList.add(playerObj);

    // return the list      
            return registerPlayerList ;

【讨论】:

    【解决方案2】:

    问题是您将 json 打印到字符串(json1 变量),但您将该字符串添加到 JSONObject。当一个字符串被添加到一个 JSONObject 时,该字符串将被转义 - 那是一个 String json 对象。

    如果您改为打印json1(并将其设置为实体),它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2014-12-09
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      相关资源
      最近更新 更多