5

我在我的应用程序中使用 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,它可以为我提供 aMultiValuedMap或其他 POST 请求中的查询参数,以json格式发送有效负载,然后将其解组为Map<String, Object>. 如果 POST 数据的类型为 ,有关如何执行相同操作的任何建议application/x-www-form-urlencoded

4

2 回答 2

10

知道了。根据文档,我可以使用 aMultivaluedMap<K,V>Formapplication/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();
    }
于 2013-07-13T14:09:35.880 回答
0

对于 is 的情况Content-Typemultipart/form-data这种MultivaluedMap方法不起作用。

在此处使用FormDataMultiPart-docs 。

于 2018-03-21T00:04:42.730 回答