我有一个在Hibernate 4.3.5中定义的实体,我试图在控制器中获取值,以便可以在JSON响应中显示它。但是我的for循环内容打印在一些 如下所示:
代码中System.out.println(emp.toString()+"\n");
的结果:
abc.cde.myproject.orm.Employee@599eeded
abc.cde.myproject.orm.Employee@75ffa715
abc.cde.myproject.orm.Employee@152beb23
abc.cde.myproject.orm.Employee@1f2f7ce1
abc.cde.myproject.orm.Employee@484ca3df
这是我使用循环的控制器代码:
@RequestMapping(value="/get_employee_details", method=RequestMethod.GET)
public String updateemployee
(
@RequestParam(value="emp_id", defaultValue="0") Integer emp_id,
@RequestParam(value="name", defaultValue="") String name
)
{
String responseJSON = null;
boolean getStatus = true;
try {
EmployeeDao employeeDao = (EmployeeDao)context.getBean("employeeDao");
Employee employee = null;
List<Employee> empList = employeeDao.findByEmployeeId(emp_id);
if ((empList != null) && (!empList.isEmpty())) {
for(Employee emp : empList){
System.out.println(emp.toString()+"\n");
}
if (getStatus) {
responseJSON = GenericOrmStatusView.OrmResponseToJsonString(true, 1,"List of Names here", true);
} else {
responseJSON = GenericOrmStatusView.OrmStatusToJsonString(false, "Update of EMPLOYEE Record Problem!", true);
}
}
} catch (Throwable th) {
th.printStackTrace();
responseJSON = GenericOrmStatusView.OrmStatusToJsonString(false, th.getMessage(), true);
}
return responseJSON;
}
我的雇员实体如下:
@Entity
@Table(name="EMPLOYEE")
public class Employee
{
public int getEmployeeId() {
return EmployeeId;
}
public void setEmployeeId(int EmployeeId) {
this.EmployeeId = EmployeeId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Id
@Column(name="Employee_ID")
@GeneratedValue(strategy=GenerationType.AUTO, generator="seqgen")
@SequenceGenerator(name="seqgen", sequenceName="Employee_AUTOINC_SEQ")
private int EmployeeId;
@Column(name="NAME")
private String name;
}
这就是DAO中findByEmployeeId
方法的定义方式:
public List<Employee> findByEmployeeId(int empID);
由于我已经在此处对ID和字符串内容进行了硬编码:
responseJSON = GenericOrmStatusView.OrmStatusToJsonString(true, 1,"List of Names here", true);
我可以看到现在正在打印以下JSON:
{
"status" : "SUCCESS",
"workflowStatusID" : 1,
"workflowStatus" : "List of Names here"
}
但是,我要传递所有ID和名称列表,而不是进行硬编码,以便可以在JSON响应中显示所有内容。在执行此操作之前,我需要使用for循环正确检索结果。
在上面的控制器代码中的for循环中我怎么了?
谢谢
答案 0 :(得分:1)
您必须重写Employee类中的toString才能以所需方式打印Employee实例(例如,使用println)。
@Override
public String toString() {
Gson gson = new Gson();
String json = gson.toJson(this);
return json;
}
您可以使用Gson之类的库来将POJO格式化为json字符串
希望这会有所帮助
答案 1 :(得分:1)
如果在不覆盖toString()方法的对象中使用toString(),则将打印出
<class name of object that you are creating>@<hashcode value in hexadecimal format returned by the hashCode() method of Object class>.
您可以获得有关toString()here
的详细信息像这样打印:
System.out.println(new ObjectMapper().writeValueAsString(emp));