【问题标题】:Unable to get correct json values from jersey response无法从球衣响应中获取正确的 json 值
【发布时间】:2016-04-05 09:25:35
【问题描述】:

我正在从数据库中获取值,并且我有一个 Web 服务,它返回从数据库中获取的值列表,我根据 Angular 的请求将其发送到前端视图层,例如 Web 服务调用

问题是我得到了不正确的 json 值。它获取键而不是值。当我在 chrome 控制台中看到它时,json 就像:

{"jobName":"NASA Scientist",
"jobPrimarySkill":null,
"jobRole":"JOB_ROLE",
"jobDesignation":"JOB_EXP",         // keyname instead of value (Incorrect values)
"jobDescription":"JOB_DESCRIPTION", // keyname instead of value (Incorrect values)
"jobSalaryRange":"JOB_POSITIONS",   // keyname instead of value (Incorrect values)
"jobExp":"JOB_SAL_RANGE",           // keyname instead of value (Incorrect values)
"jobPositions":"JOB_POSTEDBY",      // keyname instead of value (Incorrect values)
"jobPostedBy":null}

我的后端代码是这样的:

@Path("/FetchJobSummary")
public class FetchJobSummaryService {

FetchJobSummaryDAO dao = new FetchJobSummaryDAO();

@GET
@Produces(MediaType.APPLICATION_JSON)
public List fetch() {

    System.out.println(dao.getJobSummaries()); 
    // prints object [com.RTH.WebServices.JobSummaries@6d90d6c5, 
        com.RTH.WebServices.JobSummaries@6d90d6c5, 
        com.RTH.WebServices.JobSummaries@6d90d6c5,....

    return dao.getJobSummaries();
    }
}

DAO 类:

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("JOB_DESCRIPTION");
        jobSummaries.setJobRole("JOB_ROLE");
        jobSummaries.setJobPrimarySkill(rs.getString("JOB_PRIMARY_SKILL"));
        jobSummaries.setJobDesignation("JOB_DESIGNATION");
        jobSummaries.setJobExp("JOB_EXP");
        jobSummaries.setJobSalaryRange("JOB_SAL_RANGE");
        jobSummaries.setJobPostedBy("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); //Prints correct values
        }
        }

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

我确信它的问题是在 java 中的某个地方而不是在前端,但不是找出问题所在

【问题讨论】:

  • 您需要像使用作业名称一样从 ResultSet 中获取数据

标签: java json jersey jersey-2.0


【解决方案1】:

当您使用 rs.getString 从结果集中获取“JOB_PRIMARY_SKILL”时,请尝试 rs.getString("JOB_DESIGNATION"),也许你错过了。

【讨论】:

    【解决方案2】:

    你有

    jobSummaries.setJobRole("JOB_ROLE");
    

    而不是

    jobSummaries.setJobRole(rs.getString("JOB_ROLE"));
    

    所以你应该有

        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);
    

    【讨论】:

    • 很高兴为您提供帮助 :) 发生在我们最好的人身上!
    • 谢谢。刚刚发现了关于同一问题的另一个问题。想我应该创建一个新问题吗?新问题是它只在前端打印第一组 json 对象,但实际上我有 6 个不同的 json 对象,就像问题中的那个
    • 看起来 jobSummaryList 只有 1 个值。你确定你得到了 reslutset 中的所有行吗?
    • 我想通了。实际问题出在dao.getJobSummaries(); 中,它正在打印相同的哈希码,所以我猜它只得到一个值
    • 发布了一个关于同一stackoverflow.com/questions/34546976/…的新问题
    【解决方案3】:

    你的错误来自这里:`

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

    应该是:

    ` 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);
    

    `

    【讨论】:

      猜你喜欢
      • 2016-08-28
      • 2021-11-26
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多