我在我的应用程序中使用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
类型,有关如何执行相同操作的任何建议。
答案 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-Type
为multipart/form-data
的情况,此MultivaluedMap
方法无效。
使用FormDataMultiPart
- docs here。