将复杂参数POST到REST服务请求URL和Body的外观

时间:2016-07-15 17:17:05

标签: java rest resteasy

所以我正在休息服务。它将向一个非常复杂的资源请求一个帖子。实际的后端需要多个(19!)参数。其中一个是字节数组。听起来这需要由客户端序列化并发送到我的服务。

我试图了解如何正确处理此问题的方法。我在想这样的事情

@POST
@Path("apath")
@Consumes(MediaType.APPLICATION_JSON, MediaType.TEXT_HTML)
public Response randomAPI(@Parameter apiID, WhatParamWouldIPutHere confused){
}

我将采用哪些参数类型来捕获入站(序列化)发布数据。客户端URI看起来像什么?

2 个答案:

答案 0 :(得分:1)

要获取请求的所有参数,您可以使用Local Storage作为@Context UriInfo方法的参数。

然后使用UriInfo#getQueryParameters()获取完整的randomAPI参数。

如果您希望将MultivaluedMap转换为简单的MultivaluedMap,我也为此添加了代码。

所以你的方法基本上会是这样的:

HashMap

其他信息:

  

@POST @Path("apath") @Consumes(MediaType.APPLICATION_JSON, MediaType.TEXT_HTML) public Response randomAPI(@Context UriInfo uriInfo){ Map params= (HashMap) convertMultiToHashMap(uriInfo.getQueryParameters()); return service.doWork(params); } public Map<String, String> convertMultiToHashMap(MultivaluedMap<String, String> m) { Map<String, String> map = new HashMap<String, String>(); for (Map.Entry<String, List<String>> entry : m.entrySet()) { StringBuilder sb = new StringBuilder(); for (String s : entry.getValue()) { sb.append(s); } map.put(entry.getKey(), sb.toString()); } return map; } 注释允许您注入实例   @Contextjavax.ws.rs.core.HttpHeaders,   javax.ws.rs.core.UriInfojavax.ws.rs.core.Request,   javax.servlet.HttpServletRequestjavax.servlet.HttpServletResponse,   javax.servlet.ServletConfigjavax.servlet.ServletContext   对象。

答案 1 :(得分:1)

我在想的是您可以简单地使用httpservlet请求,并且可以检索所有参数,如下所示

@RequestMapping(value = "/yourMapping", method = RequestMethod.POST)
public @ResponseBody String yourMethod(HttpServletRequest request) {
          Map<String, String[]> params = request.getParameterMap();
          //Loop through the parameter maps and get all the paramters one by one including byte array
          for(String key : params){
            if(key == "file"){  //This param is byte array/ file data, specially handle it
            byte[] content = params.get(key);
             //Do what ever you want with the byte array

            else if(key == "any of your special params") {
             //handle
            }

            else {
            }

          }
}

http://docs.oracle.com/cd/E17802_01/products/products/servlet/2.3/javadoc/javax/servlet/ServletRequest.html#getParameterMap%28%29