【问题标题】:simple ajax return json with exception in struts2 and Restfulstruts2和Restful中的简单ajax返回json异常
【发布时间】:2017-03-07 10:17:25
【问题描述】:

我有一个操作应该从 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)

【问题讨论】:

  • 对象应该是一个 bean 而不仅仅是一个字符串

标签: javascript json ajax rest struts2


【解决方案1】:

有两个问题:

  1. Struts2 json result will serialize a Java object into a JSON object 独立,因此
    不必自己序列化它;

  2. 该属性必须可以从外部访问,因此您不能在操作方法内部定义它,但您需要在操作级别进行。只有具有 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。

【讨论】:

  • 您好 Andrea,感谢您的回答,但它似乎在 struts2.5.8 中不起作用,我正在使用与您相同的代码并在 struts2.3 中工作,但在升级到 2.5.8 之后,它有这个例外。你知道会发生什么吗?再次感谢~
  • 我需要包含一些新的库吗?
  • 2.5.8 不是最新的,试试 2.5.10。顺便说一句,如果 root 是一个对象,它是否实现了 Serializable ?
  • 是的,我已经升级到 2.5.10,root 是一个对象,它仍然不能序列化。但我发现我可以将 getModel 与正确的对象一起使用,它会覆盖 json 并为我返回正确的 json。
  • 我在问题中看不到任何模型驱动的东西;如果您发布不同的代码,帮助您将变得更加困难;)
猜你喜欢
  • 2012-05-17
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多