java - 轻松 : How to consume Map as QueryParam in resteasy service api

标签 java json jboss jax-rs resteasy

嗨,我正在使用resteasy api,我需要使用Map作为QueryParam。我可以使用列表作为 QueryParam,但是当我尝试传递 Map 时,我收到下面提到的错误。

这是我的服务代码

@GET
@Path("/movies")
@Produces(MediaType.APPLICATION_JSON)
public SolrDocumentList getPropertiesByKeyword1(@QueryParam("filterMap") final Map<String,String> list)
 {}

[org.jboss.resteasy.core.ExceptionHandler] (http-/0.0.0.0:18080-1) 执行 POST/solr/search/properties 失败:org.jboss.resteasy.spi.ReaderException:org.codehaus。 jackson.map.JsonMappingException:无法实例化类型[ map 类型;的值] class java.util.LinkedHashMap, [简单类型, 类 java.lang.String] -> [简单类型, 类 java.lang.String]] 来自 JSON 字符串;没有单字符串构造函数/工厂方法(通过引用链:com.rentr.solr.SearchRequestDto["filterMap"]) 在 org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:183) [resteasy-jaxrs-3.0.6.Final.jar:] 在 org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:88) [resteasy-jaxrs-3.0.6.Final.jar:] 在 org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:111) [resteasy-jaxrs-3.0.6.Final.jar:] 在 org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:280) [resteasy-jaxrs-3.0.6.Final.jar:] 在 org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:234) [resteasy-jaxrs-3.0.6.Final.jar:] 在 org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:221) [resteasy-jaxrs-3.0.6.Final.jar:] 在 org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356) [resteasy-jaxrs-3.0.6.Final.jar:] 在 org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) [resteasy-jaxrs-3.0.6.Final.jar:] 在 org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) [resteasy-jaxrs-3.0.6.Final.jar:]

我们可以使用Map作为QueryParam吗?如果可以,那么如何使用?

最佳答案

注入(inject)的值不会是 Map 。与 Map ,您建议会有不同的 key ,但实际上只有一个,"filter" 。所以而不是 Map ,您使用 List<String>

@Path("list")
public class QueryParamMapResource {

    @GET
    public Response getQueryParams(@QueryParam("filter") List<String> params) {
        StringBuilder builder = new StringBuilder("Filter Params: ");
        for (String value : params) {
            builder.append(value).append(",");
        }
        return Response.ok(builder.toString()).build();
    }
}

C:\>curl "http://localhost:8080/test/rest/list?filter=hello&filter=world"
Result: Filter Params: hello,world,

<小时/>

另一种选择是从 UriInfo 获取所有查询参数(似乎没有必要,只是向您展示选项:-)

@GET
public Response getQueryParams(@Context UriInfo uriInfo) {
    MultivaluedMap<String, String> queryMap = uriInfo.getQueryParameters();
    StringBuilder builder = new StringBuilder("Filter Params: ");
    List<String> params = queryMap.get("filter");
    for (String value : params) {
        builder.append(value).append(",");
    }
    return Response.ok(builder.toString()).build();
}

来自queryMap ,您可以尝试通过键获取查询参数值,它将返回该键的值的列表

关于java - 轻松 : How to consume Map as QueryParam in resteasy service api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28678723/

相关文章:

java - Xpath contains text() 不适用于注释

java - 如何在不编辑源文件的情况下向源文件添加方法?

java - 如何将作为服务运行的 JBoss AS 6 绑定(bind)到 0.0.0.0?

json - F# 关键字是 Firebase JSON 中的一个字段 - 解决方法吗?

mysql - JBoss Wildfly 10 MYSQL 驱动程序安装问题

java - 从 JBoss 上运行的 JSF 应用程序调用 Microsoft EWS

java - 404异常中的Spring自定义消息

Java数组循环方法返回数组中的最后一个值

json - 如何将 json 模式转换为 avro 模式

php - 如何使用 PHP 解析 JSON 字符串