我有一个应该从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)
答案 0 :(得分:1)
有两个问题:
Struts2 json
result will serialize a Java object into a JSON object本身,因此你不必须自己序列化;
该属性必须可以从外部访问,因此您无法在里面定义操作方法,但您需要在操作级别执行此操作。只有带有getter的非瞬态类级属性才会被序列化(即使使用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;
}
}
使用String后,myJsonObject
可以转换为Map或Bean(例如具有winston
属性的bean,并为其分配testing
值,以便返回
{"winston":"testing"}
示例中的JSON。