Java 我不明白为什么不能将object.getter()添加到多值映射中

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

我尝试发送带有一些参数的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 = 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()
替换任何现有值,而
添加()
添加新值