【问题标题】:unable to get all values of json无法获取json的所有值
【发布时间】:2016-04-05 10:59:45
【问题描述】:

我正在尝试使用 rest webservice 将从数据库获取的值返回到前端视图,但问题是它只返回 json 值的一行(第一行)

我有这样的json:

{"jobName":"NASA Scientist","jobPrimarySkill":null,"jobRole":"JOB_ROLE","jobDesignation":"JOB_EXP","jobDescription":"Sample 2","jobSalaryRange":"JOB_POSITIONS","jobExp":"JOB_SAL_RANGE","jobPositions":"JOB_POSTEDBY","jobPostedBy":null}
{"jobName":"NASA Scientist","jobPrimarySkill":null,"jobRole":"JOB_ROLE","jobDesignation":"JOB_EXP","jobDescription":"JOB_DESCRIPTION","jobSalaryRange":"JOB_POSITIONS","jobExp":"JOB_SAL_RANGE","jobPositions":"JOB_POSTEDBY","jobPostedBy":null}
{"jobName":"Web developer","jobPrimarySkill":null,"jobRole":"JOB_ROLE","jobDesignation":"JOB_EXP","jobDescription":"XYZ 123","jobSalaryRange":"JOB_POSITIONS","jobExp":"JOB_SAL_RANGE","jobPositions":"JOB_POSTEDBY","jobPostedBy":null}
{"jobName":"Web developer","jobPrimarySkill":null,"jobRole":"JOB_ROLE","jobDesignation":"JOB_EXP","jobDescription":"JOB_DESCRIPTION","jobSalaryRange":"JOB_POSITIONS","jobExp":"JOB_SAL_RANGE","jobPositions":"JOB_POSTEDBY","jobPostedBy":null}
{"jobName":"Programmer","jobPrimarySkill":null,"jobRole":"JOB_ROLE","jobDesignation":"JOB_EXP","jobDescription":"JOB_DESCRIPTION","jobSalaryRange":"JOB_POSITIONS","jobExp":"JOB_SAL_RANGE","jobPositions":"JOB_POSTEDBY","jobPostedBy":null}
{"jobName":"Programmer","jobPrimarySkill":null,"jobRole":"JOB_ROLE","jobDesignation":"JOB_EXP","jobDescription":"JOB_DESCRIPTION","jobSalaryRange":"JOB_POSITIONS","jobExp":"JOB_SAL_RANGE","jobPositions":"JOB_POSTEDBY","jobPostedBy":null}

它只将第一行 json 值返回到前端,而不是全部返回。我将从数据库中获取的值添加到 List 并像这样在 web 服务中公开它:

public class FetchJobSummaryDAO {

public List getJobSummaries() {

JobSummaries jobSummaries = new JobSummaries();
List<JobSummaries> jobSummaryList = new ArrayList<JobSummaries>();

try {
    Connection con = DBConnection.getConnection();

    String query = "select JOB_NAME,JOB_DESCRIPTION,JOB_ROLE,JOB_PRIMARY_SKILL,JOB_DESIGNATION,JOB_EXP,JOB_SAL_RANGE, JOB_POSTEDBY from TBL_JOBPOSTING";

    PreparedStatement pst = con.prepareStatement(query);
    ResultSet rs = pst.executeQuery();

    ResultSetMetaData rsmd = rs.getMetaData();
    int columnsNumber = rsmd.getColumnCount();
    while (rs.next()) {
        jobSummaries.setJobName(rs.getString("JOB_NAME"));
        jobSummaries.setJobDescription(rs.getString("JOB_DESCRIPTION"));
        jobSummaries.setJobRole(rs.getString("JOB_ROLE"));
        jobSummaries.setJobPrimarySkill(rs.getString("JOB_PRIMARY_SKILL"));
        jobSummaries.setJobDesignation(rs.getString("JOB_DESIGNATION"));
        jobSummaries.setJobExp(rs.getString("JOB_EXP"));
        jobSummaries.setJobSalaryRange(rs.getString("JOB_SAL_RANGE"));
        jobSummaries.setJobPostedBy(rs.getString("JOB_POSTEDBY"));
        jobSummaryList.add(jobSummaries);

        for (int i = 1; i <= columnsNumber; i++) {
            if (i > 1) {
                System.out.print(",  ");
            }
            String columnValue = rs.getString(i);
            System.out.print(rsmd.getColumnName(i) + " " + columnValue);
        }
        System.out.println("");
    }

} catch (SQLException ex) {
    Logger.getLogger(FetchJobSummaryDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return jobSummaryList;
}

网络服务:

@Path("/FetchJobSummary")
public class FetchJobSummaryService {
FetchJobSummaryDAO dao = new FetchJobSummaryDAO();

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<JobSummaries> fetch() {
    List js = dao.getJobSummaries();
    for(int i=0; i< js.size(); i++){
        System.out.println(js); //prints values with same hashcode
    }
    return dao.getJobSummaries();
    }
}

当我打印列表时,它会打印具有相同哈希码的值,所以我猜它只得到一个 json 值

[com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809]
[com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809]
[com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809]
[com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809]
[com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809]
[com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809, com.RTH.WebServices.JobSummaries@691c5809]

【问题讨论】:

  • 这是非常基础的 Java。查看您创建 JobSummaries 的位置以及将其添加到列表的时间。您正在使用相同的实例。您需要为每一行数据创建一个新的
  • @peeskillet 你是对的.. 列表只包含一个元素.. 基本概念

标签: java json jersey jersey-2.0


【解决方案1】:

我认为有两个问题: 1)每次循环getJobSummaries时都需要创建一个新实例 2)您需要每次打印出每一行而不是列表

问题就在这里:

List js = dao.getJobSummaries();
    for(int i=0; i< js.size(); i++){
        System.out.println(js); //prints the whole list every time
    }

您每次都在打印列表。我认为您想获取列表中的项目-例如:

List js = dao.getJobSummaries();
for (Object j : js) {
        System.out.println(j); //prints each item in the list
}

【讨论】:

  • 谢谢。只是想知道对于每个结果集行,它将创建一个新实例。这不是一个糟糕的oo方法。有没有更好的方法让我学习并达到同样的效果?
【解决方案2】:

这样改

public class FetchJobSummaryDAO {

     public List getJobSummaries() {

     JobSummaries jobSummaries = null;
     List<JobSummaries> jobSummaryList = new ArrayList<JobSummaries>();

  try {

    Connection con = DBConnection.getConnection();

String query = "select JOB_NAME,JOB_DESCRIPTION,JOB_ROLE,JOB_PRIMARY_SKILL,JOB_DESIGNATION,JOB_EXP,JOB_SAL_RANGE, JOB_POSTEDBY from TBL_JOBPOSTING";

PreparedStatement pst = con.prepareStatement(query);
ResultSet rs = pst.executeQuery();

ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
while (rs.next()) {
    jobSummaries =  new JobSummaries()
    jobSummaries.setJobName(rs.getString("JOB_NAME"));
    jobSummaries.setJobDescription(rs.getString("JOB_DESCRIPTION"));
    jobSummaries.setJobRole(rs.getString("JOB_ROLE"));
   jobSummaries.setJobPrimarySkill(rs.getString("JOB_PRIMARY_SKILL"));
    jobSummaries.setJobDesignation(rs.getString("JOB_DESIGNATION"));
    jobSummaries.setJobExp(rs.getString("JOB_EXP"));
    jobSummaries.setJobSalaryRange(rs.getString("JOB_SAL_RANGE"));
    jobSummaries.setJobPostedBy(rs.getString("JOB_POSTEDBY"));
    jobSummaryList.add(jobSummaries);

    for (int i = 1; i <= columnsNumber; i++) {
        if (i > 1) {
            System.out.print(",  ");
        }
        String columnValue = rs.getString(i);
        System.out.print(rsmd.getColumnName(i) + " " + columnValue);
    }
    System.out.println("");
}

 } catch (SQLException ex) {
Logger.getLogger(FetchJobSummaryDAO.class.getName()).log(Level.SEVERE,               null, ex);
   }
  return jobSummaryList;

}

【讨论】:

  • 感谢 Anoop LL 它应该可以工作,但只是想知道对于每个结果集行,它将创建一个新实例。这不是一个糟糕的oo方法。有没有更好的方法让我学习并达到同样的效果?
  • @kittu 它应该创建一个新实例然后我们才能将引用保存在列表中其他方式我们将如何将这些对象存储在列表中?这不是一个坏方法这是最好的方法..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多