Jersey:将所有POST数据都合并到一个对象中

时间:2013-07-13 13:47:55

标签: java rest jersey unmarshalling

我在我的应用程序中使用Jersey 1.8。我正在尝试在服务器上使用POST数据。数据属于application/x-www-form-urlencoded类型。 是否有方法可以在一个对象中获取所有数据,可能是Map<String, Object>

我遇到泽西岛的@Consumes(MediaType.APPLICATION_FORM_URLENCODED)。但是使用它需要我使用@FormParam,如果参数的数量很大,这可能会很乏味。或者可能有一种方式:

    @POST
    @Path("/urienodedeample")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.APPLICATION_JSON)
    public Response uriEncodedExample(String uriInfo){
        logger.info(uriInfo);
        //process data
        return Response.status(200).build();
    }

上面的代码在String对象中使用并显示表单数据。

_search=false&nd=1373722302667&rows=10&page=1&sidx=email&sord=desc

处理此问题可能容易出错,因为任何放错位置的&和split()都会返回损坏的数据。

我使用UriInfo进行大部分工作,它会在MultiValuedMap或其他POST请求中提供查询参数,以json格式发送有效负载,然后将其编组为Map<String, Object>格式{1}}。如果POST数据属于application/x-www-form-urlencoded类型,有关如何执行相同操作的任何建议。

2 个答案:

答案 0 :(得分:10)

知道了。根据{{​​3}}文档,我可以使用MultivaluedMap<K,V>this在一个对象中获取application/x-www-form-urlencoded类型的所有POST数据。一个工作的例子:

    @POST
    @Path("/urienodedeample")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.APPLICATION_JSON)
    public Response uriEncodedExample(MultivaluedMap<String,String> multivaluedMap) {
        logger.info(multivaluedMap);
        return Response.status(200).build();
    }

答案 1 :(得分:0)

对于Content-Typemultipart/form-data的情况,此MultivaluedMap方法无效。

使用FormDataMultiPart - docs here