2014-12-03 47 views
1

我想從使用getJSON jQuery方法的java服務器獲取響應文本。雖然,當java類是簡單格式(StringListMap)時,我可以獲得響應數據,但在使用其他java對象時無法獲取成功數據。在Struts 2中從Java中獲取JSON對象

下面的Java類是簡單類型並獲得成功的訪問數據和工作

package com.awitd.framework.action; 

import com.opensymphony.xwork2.Action; 

public class getAllJson implements Action{ 

private String data; 

public String getData() { 
    return data; 
} 

public void setData(String data) { 
    this.data = data; 
} 

public String execute() { 
    System.out.println(" this is from action"); 
    data = "["; 
      data += "{"; 
      data += "\"objid\":\"" + "1" + "\","; 
      data += "\"id\":\"" + "1" + "\",\"name\":\"" + "name" + "\""; 
      data += "}"; System.out.println("data " + data); 

    data += "]"; 

    return SUCCESS; 
} 


} 

下面的Java類使用其他java對象,並且不返回成功信息數據

package com.awitd.framework.action; 

import java.util.List; 

import com.opensymphony.xwork2.Action; 
import com.awitd.framework.entity.Employee; 
import com.awitd.framework.entity.Profile; 
import com.awitd.framework.service.EmployeeService; 
public class getAllJson implements Action{ 

private String data; 

private EmployeeService employeeService; 



private List<Employee> employeeList; 
private Employee employee; 
private Profile profile; 
public String getData() { 
    return data; 
} 

public void setData(String data) { 
    this.data = data; 
} 

public EmployeeService getEmployeeService() { 
    return employeeService; 
} 

public void setEmployeeService(EmployeeService employeeService) { 
    this.employeeService = employeeService; 
} 

public String execute() { 
    System.out.println(" this is from action"); 
    data = "["; 
      /*data += "{"; 
      data += "\"objid\":\"" + "1" + "\","; 
      data += "\"id\":\"" + "1" + "\",\"name\":\"" + "name" + "\""; 
      data += "}"; System.out.println("data " + data);*/ 



    employeeList = employeeService.getAll();  
    System.out.println("size........"+employeeList.size()); 
    if (!employeeList.isEmpty()) { 
     for (int i=0; i<employeeList.size(); i++) { 
      employee = employeeList.get(i); 
      profile = employee.getProfile(); 
      data += "{"; 
      data += "\"objid\":\"" + employee.getEmployeeId() + "\","; 
      data += "\"id\":\"" + employee.getId() + "\",\"name\":\"" + employee.getName() + "\""; 
      data += ",\"dob\":\"" + profile.getDob() + "\",\"sex\":\"" + profile.getSex() + "\""; 
      data += ",\"email\":\"" + profile.getEmail() + "\",\"workstart\":\"" + profile.getWorkstart() + "\""; 
      data += ",\"study\":\"" + profile.getStudySub() + "\",\"jplevel\":\"" + profile.getJpLevel() + "\""; 
      data += ",\"jpgroup\":\"" + profile.getJpGroup() + "\",\"remark\":\"" + profile.getRemark() + "\""; 
      data += "}"; 
      if (!(i==employeeList.size()-1)) 
       data += ","; 
     } 
    } 
    data += "]"; 




    return SUCCESS; 
} 


} 

得到這個錯誤:

No existing transaction found for transaction marked with propagation 'mandatory' 

java.lang.reflect.InvocationTargetException  
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: 
org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException 
org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246) 
org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178) 
org.apache.struts2.json.JSONWriter.process(JSONWriter.java:168) 
org.apache.struts2.json.JSONWriter.value(JSONWriter.java:134) 
org.apache.struts2.json.JSONWriter.write(JSONWriter.java:102) 
org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:116) 
org.apache.struts2.json.JSONResult.createJSONString(JSONResult.java:196) 
org.apache.struts2.json.JSONResult.execute(JSONResult.java:170) 
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:367) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:271) 
+0

InvocationTargetException僅僅是真實錯誤的抽象層。請找到堆棧跟蹤(由...引起)的真實錯誤,並在此處發佈 – 2014-12-03 10:08:20

回答

1

請嘗試以下代碼,它應該修復錯誤

data += "{"; 
data += "\"objid\":\"" + employee.getEmployeeId() + "\","; 
data += "\"id\":\"" + employee.getId() + "\",\"name\":\"" + employee.getName() + "\","; 
data += ",\"dob\":\"" + profile.getDob() + "\",\"sex\":\"" + profile.getSex() + "\","; 
data += ",\"email\":\"" + profile.getEmail() + "\",\"workstart\":\"" + profile.getWorkstart() + "\","; 
data += ",\"study\":\"" + profile.getStudySub() + "\",\"jplevel\":\"" + profile.getJpLevel() + "\","; 
data += ",\"jpgroup\":\"" + profile.getJpGroup() + "\",\"remark\":\"" + profile.getRemark() + "\""; 
data += "}"; 
+0

我甚至無法使用「EmployeeService employeeService」,我嘗試使用簡單的查詢即可!所以我認爲JSON編寫者不能將employeeservice轉換爲JSON類型的對象。 – 2014-12-04 03:10:38

+0

你不應該使用json結果來序列化'employeeService'。看看如何從進程中排除屬性[here](http://stackoverflow.com/a/21350079/573032)。 – 2014-12-04 09:12:13