支持Jersey中的Multipart和Application Url编码参数

时间:2013-08-08 18:43:28

标签: forms jersey multipartform-data

我在泽西岛有休息服务。我想有一些post方法接受参数multipart和url编码。我开始时:

@POST
@Path("/some/resource")
public String addSomeResource(@FormParam("param") String param) {
     repository.add(new SomeResource(param));
}

我的理解是,使用@Consumes更加狭隘地定义了什么是可接受的,当然,无论是否有人以通常的方式附加表单数据,都会调用此方法

$.ajax({url:'/some/resource', type:'POST', data:'&param=foo'});

或通过多部分表单提交(来自某个Java客户端包装http客户端)。

但是当它通过multipart进入时 - 映射不会发生,param为空。我假设那是因为它在方法中期望@FormDataParam而不是@FormParam - 但我也相信当我更狭义地定义时,我只能使用@FormDataParam仅作为Multipart消费者使用。 FormDataParamhttp://jersey.java.net/nonav/apidocs/1.5/contribs/jersey-multipart/com/sun/jersey/multipart/FormDataParam.html)的文档似乎暗示如果没有多部分参数,FormDataParam可以回退到FormData

我目前的解决方案是为每个帖子选项提供两种方法:

@POST
@Path("/some/resource")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String addSomeResource(@FormParam("param") String param) {
     repository.add(new SomeResource(param));
}
@POST
@Path("/some/resource")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String addSomeResourceMP(@FormDataParam("param") String param) {
     return addSomeResource(param);
}

这似乎可能有用,但我想知道我是否只是误解了一些更基本的东西,或者错过了一个更好的不同修复。

0 个答案:

没有答案