我在泽西岛有休息服务。我想有一些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:'¶m=foo'});
或通过多部分表单提交(来自某个Java客户端包装http客户端)。
但是当它通过multipart进入时 - 映射不会发生,param
为空。我假设那是因为它在方法中期望@FormDataParam
而不是@FormParam
- 但我也相信当我更狭义地定义时,我只能使用@FormDataParam
仅作为Multipart消费者使用。 FormDataParam
(http://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);
}
这似乎可能有用,但我想知道我是否只是误解了一些更基本的东西,或者错过了一个更好的不同修复。