我不得不接受若干经由HTTP POST方法参数,其被设计为处理一个标准形式的数据,应用程序/ x-WWW窗体-urlencoded内容类型的现有泽西web服务方法; 其中一个参数是一个字符串列表。 下面是该方法的签名我的一个例子。
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response createItem(
@FormParam("p1") long p1,
@FormParam("p2") String p2,
@FormParam("p3") List<String> p3,
@FormParam("p4") String p4,
@Context UriInfo uriInfo
) throws SQLException {
这是正常工作和当多个P3参数在列表被传递正确由新泽西产生并传递到方法。
我现在需要让这个方法会接受一个多部分请求,这样一个文件也可以与现有的参数上传沿的替代版本。 因此,我创建一个非常类似的方法签名消耗如下所示的多部分请求的例子。
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response createItemWithFile(
@FormDataParam("p1") long p1,
@FormDataParam("p2") String p2,
@FormDataParam("p3") List<String> p3,
@FormDataParam("p4") String p4,
@FormDataParam("file") InputStream inputStream,
@Context UriInfo uriInfo
) throws SQLException {
我改变了FormParam注释FormDataParam因为我相信耗时多部分数据时,这是必要的。 我一直在试图调用使用RESTAssured拨打电话(同已经对原来的方法进行)从JUnit测试这种方法,但我得到了下面的错误。
java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
说完就把一些破发点到新泽西州的代码,在一些堆栈跟踪中标识的点,它似乎已经确定调用正确的方法,但在它试图传递给它的参数列表,省略P3 。
是否有不同的东西需要做,以支持接受一个列表作为输入与多部分数据处理时? 鉴于这是一个可选参数,我希望它应该有可能无论如何忽略它,这是与原始方法的情况。
在测试中RESTAssured代码被用来调用该方法如下。
Response response = given()
.header("my_header", "xyz")
.param("p1", "8000040")
.param("p2", "sample string")
.param("p3", "first_value")
.param("p4", "abcde")
.multiPart("file", myFile1, inputStream)
.expect()
在地方参数的时RESTAssured测试代码使用formParam的时候,却得到相同的结果我也试过。
在此先感谢,任何帮助,将不胜感激。