无法从球衣响应中获得正确的 json 值
Unable to get correct json values from jersey response
我正在从数据库中获取值,并且我有一个网络服务,其中 returns 从数据库中获取的值列表,我根据 angular 的请求将其发送到前端视图层,例如网络服务调用
问题是我得到的 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 class:
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 的某个地方而不是在前端,但我没有弄清楚哪里出了问题
当您使用 rs.getString 从结果集中获取 "JOB_PRIMARY_SKILL" 时,尝试
rs.getString("JOB_DESIGNATION"),也许你错过了。
你有
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);
你的错误来自这里:`
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);
`
我正在从数据库中获取值,并且我有一个网络服务,其中 returns 从数据库中获取的值列表,我根据 angular 的请求将其发送到前端视图层,例如网络服务调用
问题是我得到的 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 class:
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 的某个地方而不是在前端,但我没有弄清楚哪里出了问题
当您使用 rs.getString 从结果集中获取 "JOB_PRIMARY_SKILL" 时,尝试 rs.getString("JOB_DESIGNATION"),也许你错过了。
你有
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);
你的错误来自这里:`
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);
`