0

在 Jersey 中使用 Root- 和 SubResource 时,我这样注释 RootResource 以接收表单参数 param1。

@Path("some/path")
public SubResource doSomething(@FormParam("param1") String param1) {
...
}

一切都按我的预期工作,但是,当没有给出参数时,球衣将返回一个内部错误状态代码(500)。一般来说,我会说这应该是一个错误的请求(400)左右。

然后我尝试做的是,我MultivaluedMap<String, String> form在参数列表中添加了一个(参见:Jersey User Guide Example 2.19)

@Path("some/path")
public SubResource doSomething(MultivaluedMap<String, String> form) {
...
}

在这种情况下,我应该能够自己处理表单参数,但form没有被填充。可能是因为缺少 @POST 注释。

我的问题:除了处理我觉得令人沮丧的 HttpServletRequest 之外,您是否知道一种方法,以便获得我的帖子参数?

谢谢你的帮助...

4

1 回答 1

0

我不完全确定您要完成什么,但是您的示例对我来说似乎都不有效。由于您试图将处理传递给子资源,因此您确实应该在那里处理参数,而不是在根资源中处理。这是一个例子:

@Path("/root/path")
public class RootResource {
    @Path("/sub/path")
    public SubResource doSomething() {
       // return an instance of your sub resource
    }
}

@Produces(MediaType.TEXT_XML, MediaType.APPLICATION_JSON)
public class SubResource {
    @GET
    @Path("/")
    public Collection<SomeBean> getAll() {}

    @GET
    @Path("/{id}
    public SomeBean getSingle() {}

    @POST
    @Path("/")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public SomeBean reallyDoSomething(@FormParam("param1") final String param) {
       // do ... something
    }
}

编辑

如果您需要访问表单参数以初始化子资源,请通过 HTTP servlet 请求访问它们:

public class RootResource {
    @Context
    private HttpServletRequest request;

    @Path("/sub/path")
    public SubResource doSomething() {
        final Map<String, String> params = request.getParameterMap();
        // process the parameters 
        // return an instance of your sub resource
    }
}
于 2012-05-12T22:07:09.280 回答