从Jersey中的RootResource获取所有post参数

时间:2012-05-12 21:37:45

标签: java jersey

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

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

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

我接着尝试做的是,我在参数列表中添加了MultivaluedMap<String, String> form(参见:Jersey User Guide示例2.19)

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

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

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

感谢您的帮助......

1 个答案:

答案 0 :(得分: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
    }
}