如何使用RESTEasy客户端将列表作为查询参数发送

4
我正在尝试使用RESTEasy客户端将列表作为查询参数调用服务:
服务:
@POST
@Path("/names")
public void getNames(@QueryParam("name") final List<String> names) {

}

客户:

final MultivaluedMap<String, Object> queryParams = new MultivaluedMapImpl<>();
queryParams.add("name", "name1");
queryParams.add("name", "name2");
final ResteasyClient client = new ResteasyClientBuilder().build();
final ResteasyWebTarget target = client.target(url).queryParams(queryParams);
final Builder builder = target.request();
builder.accept(MediaType.APPLICATION_JSON);
final Response response = builder.post(Entity.form(form));

当我调用/names端点时,将有1个元素,并且names.get(0) == [name1, name2]

@Cássio Mazzochi Molin:URI包括查询参数通常用于标识资源,而请求正文包含资源的表示。因此,在某些情况下,例如POST礼物给忠实客户:/customers?minOrders=10可能是有意义的。 - lefloh
@user3784148:您使用的是哪个版本的RESTeasy?我无法在3.0.6.Final中重现它。或者我可能误解了您的问题。 - lefloh
@lefloh 我试图编辑评论,不小心删除了它。你关于在POST请求中使用查询参数的观点是完全正确的。感谢提供示例。 - cassiomolin
1个回答

2
问题已经解决。我最近发布的代码运行良好。
错误的代码是:
final List<String, String> list = new ArrayList<>();
list.add("name1");    
list.add("name2");    
final MultivaluedMap<String, Object> queryParams = new MultivaluedMapImpl<>();
queryParams.addAll("name", list);
final ResteasyClient client = new ResteasyClientBuilder().build();
final ResteasyWebTarget target = client.target(url).queryParams(queryParams);;
final Builder builder = target.request();
builder.accept(MediaType.APPLICATION_JSON)
final Response response = builder.post(Entity.form(form));

如果我查看MultivaluedMapImpl类的代码,我发现使用“add”或“addAll”方法没有区别!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接