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

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

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

将它们作为"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.jar将json插件添加到项目依赖json-lib-2.3-jdk15.jar 。 拦截器json提供的插件,用于从请求中读取和填充操作。 如果您不想填充操作,则不应使用此拦截器。 而是使用此或任何其他第三方库手动解析请求以获取JSONObject 。 或者您可以重写拦截器并注释使用JSONPopulator但使用JSONPopulator反序列化该对象的JSONUtil

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

如果要在其中发送带有多个键值对的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"};