2016-03-10 63 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 ...)的實例。

相關問題