使用ZK Framework获取POST请求的参数

时间:2014-10-28 10:29:25

标签: java post zk

我想使用 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

2 个答案:

答案 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帮助我解决了我的问题。