- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我尝试发送带有一些参数的 POST 请求。为此,我形成了 MultivaluedMap
如果我将其添加到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
这是我的帖子方法
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,则会出现错误。
第 2 部分。我找到了这篇文章 this article
但我不明白何时使用add
或put
以及它们的区别?
最佳答案
您能否明确说明如何创建 MultivaluedMap
实例?你用得怎么样?
MultivaluedMap 是一对键(单值)和值(对象列表)。请参阅声明:
public interface MultivaluedMap<K,V> extends Map<K,List<V>>
我想您的两个片段都在同一段代码中按顺序使用。在第一种情况下,您初始化键“ban”的值(这意味着:该值是一个元素的列表),在第二种情况下,您将一个值添加到列表中相同的键“ban”。对于键“用户名”来说,情况完全相同。在你的第一种情况下,Java自动将列表(一个值)捕获为字符串,在第二个添加
之后,情况不可能是这样。
要验证它,您只需更改顺序(先执行第二种情况,然后执行第一种)。在第二个之后,您应该会收到相同的错误。
要解决您的问题,如果您想“更新/替换”值,请考虑使用方法 putSingle
而不是 add,或者在下次使用之前重新启动 formData
实例 (formData = new ...)。
关于java - 我不明白为什么我不能将 object.getter() 添加到 MultivaluedMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35911477/
我是一名优秀的程序员,十分优秀!