我正在尝试使用jQuery / ajax调用portlet的serveResource()方法。我设法得到一个简单的JSR-286 portlet,它在Pluto 2.0中工作,能够从请求体读取JSON字符串,从JSON创建一个Java对象,并将该对象的toString()返回给我的调用JavaScript。但是,当我将相同的portlet部署到WebSphere Portal 6.1时,请求体在到达serveResource()时为空。
我假设我遗漏了一些基本/基本的东西,所以任何建议都会受到赞赏。我想如果我将JSON字符串推送到URL参数上,但我现在可以避免使用这种方法,我可以让我的示例工作,除非我给出了我当前方法“糟糕”的理由。
编辑:*更具体地说,我将相同的portlet部署到运行WSRP Producer的WAS7并通过WebSphere Portal 6.1使用portlet。
Javascript片段:
function ajaxPost() {
var url = "<%= testServiceURL %>";
var current = $("input.current").val();
$.ajax(
{
url: url,
contentType: 'application/json; charset=utf-8',
dataType: 'html',
data: "{data: " + current + "}",
type: 'POST',
success: testSuccess,
error: testError
}
);
$("div.trace").append("ajax post fired<br />");
}
function testSuccess(data, textStatus, XMLHttpRequest)
{
$("div.trace").append("testSuccess(): " + data + "<br />");
}
Portlet代码段:
public class TestPortlet extends GenericPortlet {
...
@Override
public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
String res = "Failed to read body";
boolean bodyRead = true;
StringBuffer sb = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
line = reader.readLine();
while (line != null) {
sb.append(line);
line = reader.readLine();
}
reader.close();
} catch (Exception e) {
bodyRead = false;
}
Foo f = null;
if (bodyRead) {
try {
Gson gson = new Gson();
f = gson.fromJson(sb.toString(), Foo.class);
res = "Received: " + f.toString();
} catch (Exception e) {
res = "Failed to convert body into Foo: '" + sb.toString() + "'";
}
}
response.setContentType("text/html");
response.getWriter().println(res);
}
}
答案 0 :(得分:1)
终于让它发挥作用了......等等。
通过将我的ajax调用中的contentType参数更改为'application / x-www-form-urlencoded'(并使用不同的方法来表示我的数据),我现在可以在我的WebSphere环境中的post主体中获得我的数据,虽然是URL参数形式,而不是JSON。
不幸的是,执行此更改导致打破了Pluto中的功能。该环境中的请求正文现在为空。
现在要么更改代码以从request.getParameter()中检索数据(我相信在我的更改但需要进一步测试的两个环境中都可以工作)或者找到将在两个环境中生成填充的请求主体的contentType
答案 1 :(得分:0)
当您发布JSON请求时,dataType必须是JSON。
dataType:'JSON',