我想要一个Action
类,它应该接受从用户界面构造的 JSON 字符串,Action
类中没有 setter 和 getter。
可能吗?如果是这样,我需要在Action
课堂和配置文件(struts.xml
)中遵循哪些约定?
我想要一个Action
类,它应该接受从用户界面构造的 JSON 字符串,Action
类中没有 setter 和 getter。
可能吗?如果是这样,我需要在Action
课堂和配置文件(struts.xml
)中遵循哪些约定?
将它们发布为 type 的内容"application/json"
。您可以通过一个简单的 jQuery Ajax 调用来完成,您可以在其中指定content-type
and 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
类。或者您可以重写拦截器并注释使用JSONPopulator
class但使用JSONUtil
class反序列化对象的代码。
此外,您可能会发现此示例在手动创建/解析 JSON 数据时很有用。
如果你想发送包含多个键值对的 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"};