我在泽西岛有休息服务。我想要一些接受参数作为多部分和 url 编码的 post 方法。我从:
@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'});
或通过多部分表单提交(来自一些包装 http 客户端的 Java 客户端)。
但是当它通过多部分进入时 - 映射不会发生并且param
为空。我假设那是因为它在方法中期待 a@FormDataParam
而不是 a @FormParam
- 但我也相信我只能@FormDataParam
在我更狭义地将 Consumes 定义为 Multipart-only 时使用。FormDataParam
(http://jersey.java.net/nonav/apidocs/1.5/contribs/jersey-multipart/com/sun/jersey/multipart/FormDataParam.html )的文档似乎暗示如果没有 multipart 参数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);
}
这似乎可行,但我想知道我是否只是误解了这里更基本的东西,或者错过了更好的不同修复。