如何使用 Jersey 读取 RESTful 服务的 POST 参数?
我没有使用 JSON 或类似的东西。我有一个简单的表单来上传文件,我想读取表单的参数。下面的代码没有按预期工作。它不会显示任何参数。
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("{appNum}/{docId}/file")
public Response uploadDocFile(
@PathParam("appNum") String appNum,
@PathParam("docId") String docId,
@Context HttpServletRequest req)
{
try {
log.info("POST Parameters:");
Enumeration e = req.getParameterNames();
while(e.hasMoreElements())
{
Object key = e.nextElement();
log.info("Key: " + key);
log.info("Val: " + req.getParameter(key.toString()));
}
} catch (Exception e) {
e.printStackTrace();
return Response.status(Status.INTERNAL_SERVER_ERROR).entity(new StatusResponse(e)).build();
}
return Response.ok().build();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
仅供参考,您需要使用@FormParam。还要确保 INPUT HTML 类型使用 name= 而不是 id=。
FYI, You need to use @FormParam. Also make sure INPUT HTML types are using name= not id=.
我有同样的问题。对各个参数使用 @FormParam 注释是可行的,但从通过 @Context 注入的 HttpServletRequest 中读取它们则不行。我还尝试使用
Provider
和@RequestParameters
通过 Guice 获取请求对象/参数。在这两种情况下都没有后置参数。但是,可以通过向资源方法添加
MultivaluedMap
参数来获取参数映射。例子:I have the same problem. Using
@FormParam
annotation for individual parameters works, but reading them fromHttpServletRequest
injected through@Context
doesn't. I also tried to get the request object/parameters through Guice usingProvider<HttpServletRequest>
and@RequestParameters<Map<String, String[]>>
. In both cases there were no post parameters.However, it is possible to get a map of parameters by adding a
MultivaluedMap<String, String>
parameter to resource method. Example:如果您在 JAVA 中使用 Jersey RESTful API,您可以查找 Jersey RESTful API。 java.net/documentation/latest/jaxrs-resources.html#d0e1433" rel="nofollow">参数注释 (@*Param)
示例:
依赖项:
代码:
注释列表: @MatrixParam、@HeaderParam、@CookieParam、@FormParam、@QueryParam、 @PathParam
If you are using Jersey RESTful API in JAVA you can look for Parameter Annotations (@*Param)
Example:
Dependency:
Code:
List of annotations: @MatrixParam, @HeaderParam, @CookieParam, @FormParam, @QueryParam, @PathParam
在某个时间点,Jersey ContainerServlet(或请求处理期间的其他 Jersey 对象)调用 request.getInputStream() 或 request.getReader(),将 'usingInputStream' 或 'usingReader' 设置为 TRUE。此状态可防止填充请求对象内的参数映射。像这样的事情:
尝试在应用程序的第一个入口点(Jersey ServletContainer.service() 方法的开头)放置一个断点并评估 request.getParametersMap() 调用。你会得到你的参数。
At some point of time Jersey ContainerServlet (or other Jersey object during request processing) calls request.getInputStream() or request.getReader() which set 'usingInputStream' or 'usingReader' to TRUE. This state prevents populating of parameters map inside the request object. Something like this:
Try putting a break point at the very first entry point (beginning of Jersey ServletContainer.service() method) of your application and evaluate request.getParametersMap() call. You'll get your parameters.