简单 ajax return json struts2 和 Restful 除外
simple ajax return json with exception in struts2 and Restful
我有一个操作应该 return 来自 AJAX 调用的 JSON,但它抛出了异常。
您是否知道问题的可能原因?
这是我的代码:
@Results({
@Result(name="json", type="json", params = {"root", "json"})
})
public class TestController{
public String tableData() {
String test = "{'winston':'testing'}";
JSONObject json = JSONObject.fromObject(test);
return "json";
}
}
抛出的异常:
ERROR RestActionInvocation Exception processing the result.
net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
at net.sf.json.JSONObject.defaultBeanProcessing(JSONObject.java:818)
at net.sf.json.JSONObject._fromBean(JSONObject.java:699)
at net.sf.json.JSONObject.fromObject(JSONObject.java:172)
at net.sf.json.AbstractJSON._processValue(AbstractJSON.java:274)
at net.sf.json.JSONObject._processValue(JSONObject.java:2655)
at net.sf.json.JSONObject.processValue(JSONObject.java:2721)
at net.sf.json.JSONObject.setInternal(JSONObject.java:2736)
at net.sf.json.JSONObject.setValue(JSONObject.java:1424)
at net.sf.json.JSONObject.defaultBeanProcessing(JSONObject.java:765)
有两个问题:
Struts2json
result will serialize a Java object into a JSON object本身,因此
你不必自己序列化它;
属性 必须可以从外部访问,因此您不能在 inside 操作方法中定义它,但您需要在动作水平。只有具有 getter 的非瞬态 class 级属性将被序列化(即使具有 root
属性)。
您要的密码是:
@Results({
@Result(name = ActionSupport.SUCCESS,
type = "json",
params = {"root", "myJsonObject"})
})
public class TestController extends ActionSupport {
private String myJsonObject;
public String getMyJsonObject(){
return myJsonObject;
}
public String execute() {
myJsonObject = "someValue";
return SUCCESS;
}
}
在使其与字符串一起工作后,myJsonObject
可以变成一个映射,或者变成一个 Bean(例如一个带有 winston
属性 的 bean一个 testing
值,为了 return
{"winston":"testing"}
JSON 如示例所示。
我有一个操作应该 return 来自 AJAX 调用的 JSON,但它抛出了异常。
您是否知道问题的可能原因?
这是我的代码:
@Results({
@Result(name="json", type="json", params = {"root", "json"})
})
public class TestController{
public String tableData() {
String test = "{'winston':'testing'}";
JSONObject json = JSONObject.fromObject(test);
return "json";
}
}
抛出的异常:
ERROR RestActionInvocation Exception processing the result.
net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
at net.sf.json.JSONObject.defaultBeanProcessing(JSONObject.java:818)
at net.sf.json.JSONObject._fromBean(JSONObject.java:699)
at net.sf.json.JSONObject.fromObject(JSONObject.java:172)
at net.sf.json.AbstractJSON._processValue(AbstractJSON.java:274)
at net.sf.json.JSONObject._processValue(JSONObject.java:2655)
at net.sf.json.JSONObject.processValue(JSONObject.java:2721)
at net.sf.json.JSONObject.setInternal(JSONObject.java:2736)
at net.sf.json.JSONObject.setValue(JSONObject.java:1424)
at net.sf.json.JSONObject.defaultBeanProcessing(JSONObject.java:765)
有两个问题:
Struts2
json
result will serialize a Java object into a JSON object本身,因此
你不必自己序列化它;属性 必须可以从外部访问,因此您不能在 inside 操作方法中定义它,但您需要在动作水平。只有具有 getter 的非瞬态 class 级属性将被序列化(即使具有
root
属性)。
您要的密码是:
@Results({
@Result(name = ActionSupport.SUCCESS,
type = "json",
params = {"root", "myJsonObject"})
})
public class TestController extends ActionSupport {
private String myJsonObject;
public String getMyJsonObject(){
return myJsonObject;
}
public String execute() {
myJsonObject = "someValue";
return SUCCESS;
}
}
在使其与字符串一起工作后,myJsonObject
可以变成一个映射,或者变成一个 Bean(例如一个带有 winston
属性 的 bean一个 testing
值,为了 return
{"winston":"testing"}
JSON 如示例所示。