我希望有一个Action
类,它应该接受从用户界面构造的JSON字符串,而Action
类中没有setter和getter。
有可能吗?如果是这样,我需要在Action
类和配置文件(struts.xml
)中遵循哪些约定?
答案 0 :(得分:4)
将它们发布为类型为"application/json"
的内容。您可以使用简单的jquery ajax调用来执行此操作,您可以在其中指定content-type
和dataType
。
$.ajax({
type: "POST",
url: "/the/action/url",
data : {},
dataType:"JSON",
contentType: "application/json; charset=utf-8"
});
使用json-lib-2.3-jdk15.jar
将json 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"};