从用户界面接受动态json数据的操作

时间:2013-05-25 13:11:08

标签: java json struts2

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

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

2 个答案:

答案 0 :(得分:4)

将它们发布为类型为"application/json"的内容。您可以使用简单的jquery ajax调用来执行此操作,您可以在其中指定content-typedataType

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

使用json-lib-2.3-jdk15.jarjson plugin添加到项目依赖项中。随interceptor json提供的插件,用于读取和填充请求中的操作。如果您不想填充操作,则不应使用此拦截器。而是使用此或任何其他第三方库手动解析请求以获取JSONObject。或者,您可以重写拦截器并对使用JSONPopulator的代码进行注释,但使用JSONUtil对对象进行反序列化。

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

答案 1 :(得分:0)

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

在Action类的decleration中,我们应该实现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"};