代码之家  ›  专栏  ›  技术社区  ›  SoftwareSavant

将复杂参数POST到REST服务,请求URL和Body是什么样子的

  •  0
  • SoftwareSavant  · 技术社区  · 9 年前

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

    要捕获入站(序列化)Post数据,我应该使用什么参数类型。客户端URI是什么样子的?

    2 回复  |  直到 9 年前
        1
  •  1
  •   Jalal Sordo    9 年前

    为了获得请求的所有参数,您可以使用 @Context UriInfo 作为您的参数 randomAPI 方法

    然后使用 UriInfo#getQueryParameters() 以获得全部 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;
        }
    

    这个 @Context 注释允许您注入 javax.ws.rs.core.HttpHeaders , javax.ws.rs.core.UriInfo , javax.ws.rs.core.Request , javax.servlet.HttpServletRequest , javax.servlet.HttpServletResponse , javax.servlet.ServletConfig , javax.servlet.ServletContext javax.ws.rs.core.SecurityContext 物体。

        2
  •  1
  •   Tharsan Sivakumar    9 年前

    我想您可以简单地使用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