3

我想要一个Action类,它应该接受从用户界面构造的 JSON 字符串,Action类中没有 setter 和 getter。

可能吗?如果是这样,我需要在Action课堂和配置文件(struts.xml)中遵循哪些约定?

4

2 回答 2

4

将它们发布为 type 的内容"application/json"。您可以通过一个简单的 jQuery Ajax 调用来完成,您可以在其中指定content-typeand dataType

$.ajax({
   type: "POST",
   url: "/the/action/url",     
   data : {},
   dataType:"JSON",
   contentType: "application/json; charset=utf-8"
});

使用 . 将json 插件添加到项目依赖项中json-lib-2.3-jdk15.jar与拦截器json一起提供的插件,用于从请求中读取和填充操作。

如果您不想填充操作,则不应使用此拦截器。而是使用此库或任何其他第三方库手动解析请求以获取JSONObject。或者您可以重写拦截器并注释使用JSONPopulatorclass但使用JSONUtilclass反序列化对象的代码。

此外,您可能会发现示例在手动创建/解析 JSON 数据时很有用。

于 2013-05-25T17:47:04.260 回答
0

如果你想发送包含多个键值对的 JSON 对象,并且你想在你的动作类中获取这些键值而不创建任何 setter/getter,

在 Action 类声明中,我们应该实现 ServletRequestAware 并且我们应该重写 setServletRequest() 方法并设置 HttpServletRequest 属性

public class YourClass extends ActionSupport implements ServletRequestAware

private HttpServletRequest request;

@Override
public void setServletRequest(HttpServletRequest request) {
    this.request = request;
}

public HttpServletRequest getServletRequest() {
  return this.request;
}

在我们的目标函数中,我们应该使用上面的请求对象来获取参数(通过它的名称,因为它在 json 中设置为键):

public String fetchData() {
  String key1Data = getServletRequest().getParameter("key1");
   String key2Data = getServletRequest().getParameter("key2"); 
  return SUCCESS;
 }

您的 JSON 对象应包含以下数据:

var jsonData = {"key1": "Hello", "key2":"There"};
于 2014-04-28T12:11:52.210 回答