如何使用 Jersey 读取 RESTful 服务的 POST 参数?

2022-09-01 16:59:17

我没有使用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();
}

答案 1

仅供参考,您需要使用@FormParam。还要确保 INPUT HTML 类型使用的是 name= 而不是 id=。


答案 2

我有同样的问题。对单个参数使用注释是有效的,但从注入到读取它们则不起作用。我还尝试使用 和 通过 Guice 获取请求对象/参数。在这两种情况下,都没有员额参数。@FormParamHttpServletRequest@ContextProvider<HttpServletRequest>@RequestParameters<Map<String, String[]>>

但是,可以通过向资源方法添加参数来获取参数映射。例:MultivaluedMap<String, String>

@POST
public void doSomething(MultivaluedMap<String, String> formParams) {
//...
}