首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >resteasy :如何在resteasy服务api中使用映射作为QueryParam

resteasy :如何在resteasy服务api中使用映射作为QueryParam
EN

Stack Overflow用户
提问于 2015-02-23 16:42:41
回答 1查看 7.8K关注 0票数 0

嗨,我正在使用resteasy,我需要使用地图作为QueryParam。我可以使用list作为QueryParam,但是当我试图传递Map时,我会得到下面提到的错误。

这是我的服务代码

代码语言:javascript
复制
@GET
@Path("/movies")
@Produces(MediaType.APPLICATION_JSON)
public SolrDocumentList getPropertiesByKeyword1(@QueryParam("filterMap") final Map<String,String> list)
 {}

执行POST /solr/search/ org.jboss.resteasy.core.ExceptionHandler失败:org.jboss.resteasy.core.ExceptionHandler:org.jboss.resteasy.spi.ReaderException无法从JSON字符串实例化类型[map类型;类java.util.LinkedHashMap、简单类型、类java.lang.String ->简单类型、类java.lang.String]的值;在org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:183) resteasy-jaxrs-3.0.6 Final.jar: at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:88) resteasy 3.0.6.final.jar: at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:111) resteasy-jaxrs-3org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:280) resteasy-jaxrs-3.0.6 Final.jar: at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:234) resteasy-jaxrs-3.0.6 Final.jar: at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:221) resteasy-jaxrs-3.0.6 Final.jar: at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356) resteasy 3.0.6.final.jar: at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) resteasy-jaxrs-3.0.6 Final.jar: at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) resteasy-jaxrs-3.0.6.Final.jar:

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

EN

回答 1

Stack Overflow用户

发布于 2015-02-24 03:59:51

注入的值将不是Map。对于Map,您是在暗示会有不同的键,而实际上,只有一个键,"filter"。因此,您不用使用Map,而是使用List<String>

代码语言:javascript
复制
@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" 结果: Filter Params: hello,world,

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

代码语言:javascript
复制
@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中,您可以尝试按键获取查询参数值,它将返回该键的值列表。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28678723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档