嗨,我正在使用resteasy,我需要使用地图作为QueryParam。我可以使用list作为QueryParam,但是当我试图传递Map时,我会得到下面提到的错误。
这是我的服务代码
@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吗?如果是,那么如何使用?
发布于 2015-02-24 03:59:51
注入的值将不是Map。对于Map,您是在暗示会有不同的键,而实际上,只有一个键,"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"结果: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中,您可以尝试按键获取查询参数值,它将返回该键的值列表。
https://stackoverflow.com/questions/28678723
复制相似问题