java - POST 复杂参数到 REST 服务,请求 URL 和正文是什么样子的

标签 java rest resteasy

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

我正在尝试了解如何纠正可以处理此问题的方法。我在想这样的事情

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

我将使用什么参数类型来捕获入站(序列化)发布数据。客户端 URI 会是什么样子?

最佳答案

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

然后使用 UriInfo#getQueryParameters()获取完整的 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;
    }

其他信息:

The @Context annotation allows you to inject instances of 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, and javax.ws.rs.core.SecurityContext objects.

关于java - POST 复杂参数到 REST 服务,请求 URL 和正文是什么样子的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38401820/

相关文章:

ios - iOS 中 GET 请求中的 POST 数据

java - 使用 AngularJS 传递参数时 Resteasy @FormParam null

java - 在 Java 对象之间复制数据的最快方法是什么?

java - 在 IE8 中按回车键会导致我的应用程序转到登录页面

php - Yii REST API - 在查询中使用多个联接

java - Restful API 的读取列表

java - 在文本上设置鼠标单击事件?

java - 使用 parallelStream().reduce() 时的错误结果

java - Wildfly 10.0 - java.lang.NoClassDefFoundError : Failed to link org/jboss/resteasy/skeleton/key/as7/OAuthAuthenticationServerValve

java - RESTEASY - 返回带有和不带有列表的相同对象