在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之外,你知道一种方法,以便我得到我的帖子参数吗?
感谢您的帮助......
答案 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
}
}