2016-03-10 62 views
1

我尝试使用一些参数发送POST请求。为此,我形成MultivaluedMap我不明白为什么我不能将object.getter()添加到多值映射

,如果我让这个增加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 cannot be cast to java.util.List

这是我的POST方法

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); 
     } 
    } 

而在第二种情况下我之后。员额(ClientResponse.class,FORMDATA)出现错误;

我不明白什么是错的。 subscriber.getBan()user.getUsername()返回字符串,如banusername,但如果我使用getter,则会出现错误。

和第2我发现这篇文章this article

,但我不明白何时使用addput和他们的区别?

+0

可能是因为它由'subscriber#getBan()',而不是'add()'抛出? –

+0

区别在于'put()'替换了任何现有的值,而'add()'添加了一个新的 –

回答

0

你能明白你如何创建你的MultivaluedMap的实例吗?你怎么使用它?

多值映射是一对关键(单值)和值(对象列表)。看到声明:

public interface MultivaluedMap<K,V> extends Map<K,List<V>> 

我想你的两个片段是在同一段代码中按顺序使用。在第一种情况下,您初始化键'禁止'的值(意思是:该值是一个元素的列表),在第二种情况下,您将一个值添加到列表中的同一个键'禁止'。它发生的关键'用户名'完全相同。 我是你的第一个案例,Java自动将该列表(一个值)追加到一个字符串中,之后第二个add,这不可能是这样。

要验证它,您可以简单地更改顺序(先做第二个案例,然后第一个案例)。在第二个之后你应该得到同样的错误。

要解决您的问题,请考虑使用方法putSingle而不是添加,如果您想“更新/替换”该值,或在再次使用该值之前重新启动formData(formData = new ...)的实例。

相关问题