简单 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)

有两个问题:

  1. Struts2json result will serialize a Java object into a JSON object本身,因此
    不必自己序列化它;

  2. 属性 必须可以从外部访问,因此您不能在 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 如示例所示。