5

我在泽西岛有休息服务。我想要一些接受参数作为多部分和 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:'&param=foo'});

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

但是当它通过多部分进入时 - 映射不会发生并且param为空。我假设那是因为它在方法中期待 a@FormDataParam而不是 a @FormParam- 但我也相信我只能@FormDataParam在我更狭义地将 Consumes 定义为 Multipart-only 时使用。FormDataParamhttp://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);
}

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

4

0 回答 0