我想使用 POST 请求将数据从一个应用程序(Spring MVC)传递到使用ZK Framework编写的另一个应用程序。
post方法的一个参数是文件。我们称之为id
。
所以,我现在拥有的是 Composer ,代码如下:
public class PictureComposer extends SelectorComposer<Component> {
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
Execution e = Executions.getCurrent();
System.out.println("post param: " + Executions.getCurrent().getParameterMap().get("id"));
HttpServletRequest request = (HttpServletRequest) e.getNativeRequest();
String idd = request.getParameter("id");
System.out.println("id: " + idd);
}
}
而且,当我尝试向此作曲家发出 POST 请求时,Executions.getCurrent().getParameterMap().get("id")
似乎返回null
。
与第二种方法相同(使用HttpServletRequest
)。
另一方面,当我使用 GET 请求并将此值作为URL中的参数传递时,我得到id
的一些值。但是,遗憾的是,我无法在URL中传递我的文件。
那么,主要问题是我如何从 POST 请求中检索变量?
UPD:(现在我尝试检索纯字符串参数,就像简化示例一样)我的 POST 请求如下所示:
POST /zssessentials/picture.zul HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="id"
wooooow
----WebKitFormBoundaryE19zNvXGzXaLvS5C
答案 0 :(得分:0)
要检索上传的文件,您应将enctype
元素的<form>
属性设置为multipart/form-data
,如下所示:
<form method="POST" action="your/zk/address" enctype="multipart/form-data" >
...
</form>
然后,您可以使用getPart
类的HttpServletRequest
方法来访问上传的文件。所以你的代码应该改成这样的东西:
Part filePart = request.getPart("id");
InputStream filecontent = filePart.getInputStream();
答案 1 :(得分:0)
我已经想通了。
原因是servlet没有自己解析多部分请求。 我一直在标题中发送带有此行的请求(即使它是纯字符串或整数值):
Content-type: multipart/form-data
这就是原因。
因此,我应该使用PictureComposer
类中的第三方库。
在我的情况下,Streaming API from Apache派上了用场。
此外,this StackOverflow answer帮助我解决了我的问题。