Java 我不明白为什么不能将object.getter()添加到多值映射中
我尝试发送带有一些参数的POST请求。对于此I表单Java 我不明白为什么不能将object.getter()添加到多值映射中,java,jersey-client,multivalue,Java,Jersey Client,Multivalue,我尝试发送带有一些参数的POST请求。对于此I表单MultivaluedMap 如果我将此添加到多值映射中 String ban = subscriber.getBan(); String username = user.getUsername(); postData.add("agent", username); postData.add("datasource", "online"); postData.add("accountId", ban); String json = RESTUti
MultivaluedMap
如果我将此添加到多值映射中
String ban = subscriber.getBan();
String username = user.getUsername();
postData.add("agent", username);
postData.add("datasource", "online");
postData.add("accountId", ban);
String json = RESTUtil.doPost(url, postData);
一切正常
但是如果我做了这个
postData.add("agent", user.getUsername());
postData.add("datasource", "online");
postData.add("accountId", subscriber.getBan());
String json = RESTUtil.doPost(url, postData);
我有一个错误:
com.sun.jersey.api.client.ClientHandlerException:java.lang.ClassCastException:java.lang.String不能强制转换为java.util.List
这是我的发帖方法
public static String doPost(String url, MultivaluedMap formData) {
try {
Client client = Client.create();
WebResource wr = client.resource(url);
client.setConnectTimeout(CONNECTION_TIMEOUT);
client.setReadTimeout(READ_TIMEOUT);
ClientResponse response2 = wr
.accept("application/json;")
.type("application/x-www-form-urlencoded; charset=UTF-8")
.post(ClientResponse.class, formData);
if (response2.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + response2.getStatus());
}
return response2.getEntity(String.class);
} catch (Exception e) {
LOG.log(Level.WARNING, "callRestUrl:", e);
JsonObject jo = new JsonObject();
jo.addProperty("resultCode", "EXCEPTION");
jo.addProperty("details", e.getMessage());
return GSON.toJson(jo);
}
}
在第二种情况下,我在.post(ClientResponse.class,formData)之后得到错误
我不明白怎么了subscriber.getBan()
和user.getUsername()
返回字符串,如ban
和username
,但如果使用getter,则会出现错误
第二部分。我找到了这篇文章
但是我不明白什么时候使用
add
或put
以及它们之间的区别。您能明确说明如何创建多值映射的实例吗?你是怎么用的
多值映射是一对键(单个值)和值(对象列表)。见宣言:
public interface MultivaluedMap<K,V> extends Map<K,List<V>>
公共接口多值映射扩展映射
我想您的两个代码段都是在同一段代码中顺序使用的。在第一种情况下,您初始化键“ban”的值(这意味着:该值是一个元素列表),在第二种情况下,您将一个值添加到同一个键“ban”的列表中。密钥“username”的情况完全相同。
在第一种情况下,Java会自动将列表(一个值)捕获为字符串,在第二种情况下,在添加后,情况不会是这样
要验证它,您只需更改顺序(先执行第二个案例,然后执行第一个案例)。第二次之后,您应该会得到相同的错误
为了解决您的情况,如果您想“更新/替换”该值,请考虑使用方法<代码> Putux<代码>,而不是在使用另一个时间之前重新启动您的代码<代码> FrasDATAs/Cuff>(FuffDATA=new…)。p> 能否明确说明如何创建
多值映射的实例?你是怎么用的
多值映射是一对键(单个值)和值(对象列表)。见宣言:
public interface MultivaluedMap<K,V> extends Map<K,List<V>>
公共接口多值映射扩展映射
我想您的两个代码段都是在同一段代码中顺序使用的。在第一种情况下,您初始化键“ban”的值(这意味着:该值是一个元素列表),在第二种情况下,您将一个值添加到同一个键“ban”的列表中。密钥“username”的情况完全相同。
在第一种情况下,Java会自动将列表(一个值)捕获为字符串,在第二种情况下,在添加后,情况不会是这样
要验证它,您只需更改顺序(先执行第二个案例,然后执行第一个案例)。第二次之后,您应该会得到相同的错误
为了解决您的情况,如果您想“更新/替换”该值,请考虑使用方法<代码> Putux<代码>,而不是在使用另一个时间之前重新启动您的代码<代码> FrasDATAs/Cuff>(FuffDATA=new…)。p> 可能是因为它是由
subscriber#getBan()
抛出的,而不是由add()
抛出的?区别在于put()
替换任何现有值,而add()
添加新值可能是因为它是由subscriber#getBan()
抛出的,而不是由add()
抛出的。区别在于put()
替换任何现有值,而添加()
添加新值