我从Angular 8 Liferay 7.3 Portlet发出POST请求,并试图在MVCResourceCommand
类的serveResource
方法中获取其内容。
前端JS看起来像这样:
submit() {
let message = {
type: "form",
body: this.model
};
this.http.post<any>("http://my/url", message).subscribe(response => {
console.log(JSON.stringify(response));
})
}
meesage到达了端点,因此后端配置良好。基于此,我还设置了"com.liferay.portlet.requires-namespaced-parameters=false"
属性,以使名称空间不会成为问题——因此,基本上,检查列表中的每一点都完成了,请求主体应该是可访问的。到目前为止,我读到的每一篇文章都在谈论用ParamUtil.getString(uploadRequest, "text");
获取请求信息,但我不确定如果主体是JSON对象,这应该如何工作——我的意思是,如果post主体看起来像这样,我应该如何检索值:
{
"firstVal": "abc",
"secondVal": "def",
"another": {
"objectVal1": 1,
"objectVal2": 2
}
}
感谢这篇文章,我只看到了这段代码,它将正文检索为String:
String body = PortalUtil.getHttpServletRequest(resourceRequest).getReader().lines()
.collect(java.util.stream.Collectors.joining(System.lineSeparator()));
尽管我解决了我的问题,但我想知道是否还有其他方法可以做到这一点。
不要指望在其他框架中工作的请求也能与Liferay一起工作。在这种情况下,您必须将所有内容作为表单数据发送到服务器。幸运的是,Liferay为这个用例提供了一个小的实用方法。对你的身体有效载荷使用这种方法:
Liferay.Util.objectToFormData(payload)
另外,如果不提供带名称空间的属性名称,还必须将此属性添加到portlet类:com.liferay.portlet.requires-namespaced-parameters=false
。