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

Tri*_*Man 26 java rest jersey

我没有使用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();
}
Run Code Online (Sandbox Code Playgroud)

Tri*_*Man 23

仅供参考,您需要使用@FormParam.还要确保INPUT HTML类型使用name = not id =.


Jam*_*mol 19

我也有同样的问题.使用@FormParam单个参数的注释可以正常工作,但是从HttpServletRequest注入中读取它们@Context不会.我还试图通过Guice使用Provider<HttpServletRequest>和获取请求对象/参数@RequestParameters<Map<String, String[]>>.在这两种情况下都没有帖子参数.

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

@POST
public void doSomething(MultivaluedMap<String, String> formParams) {
//...
}
Run Code Online (Sandbox Code Playgroud)


Ven*_*min 5

如果您在JAVA 中使用Jersey RESTful API,则可以查找参数注释(@*Param)

例:

相关性:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-client</artifactId>
    <version>1.8</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

码:

package yourpack;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("/path_to_data")
public class DataResource {
    @GET
    @Path("/{param}")
    public Response getMsg(@PathParam("param") String urlparam) {
        int ok = 200;
        String result = "Jersey Data resource: " + urlparam;

        return Response.status(ok).entity(result ).build();
    }
}
Run Code Online (Sandbox Code Playgroud)

注释列表:@MatrixParam,@HeaderParam,@CookieParam,@FormParam,@QueryParam,@PathParam