我试图使用Volley库向服务器发出一个JSONObject POST请求,该请求包含两个参数,一个对象(地址)和一个不同对象(租户)的列表。
当我尝试发出请求时,第一个参数(地址)在发送之前被截取格式化,服务器不接受该请求。
我的请求如下所示:
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, SERVER_URL,
postPropertyJSONObject, responseListener, errorListener)
我的postPropertyJSONObject是这样创建的:
JSONObject obj = new JSONObject();
obj.put("Address", convertAddressToJson(property.getAddress()).toString());
obj.put("Tenants", prop.getTenantList());
convertAddressToJson()方法如下所示:
JSONObject jsonObject= new JSONObject();
jsonObject.put("Building", address.getBuilding());
jsonObject.put("Street", address.getStreet());
jsonObject.put("Town", address.getTown());
jsonObject.put("ZipCode", address.getZipCode());
jsonObject.put("County", address.getCounty());
jsonObject.put("Country", address.getCountry());
我尝试只是传递地址对象,但这根本没有序列化,所以它也不起作用。我还尝试在请求中使用的JSONObject的“地址”字段中传递ddress.to字符串(),但这也不起作用。
my Property对象的getAddress()方法返回一个地址对象,如下所示:
public class Address {
private String Street;
private String Building;
private String Town;
private String ZipCode;
private String County;
private String Country;
// getters and setters
}
当我在传递请求之前记录地址时,它看起来如下所示:
{"Town":"MyTown","Street":"MyStreet","County":"MyCounty","Country":"MyCountry",
"ZipCode":"MyZipCode","Building":"MyBuilding"}
但是,当服务器记录它接收到的内容时,它看起来是这样的:
{\"Town\":\"MyTown\",\"Street\":\"MyStreet\",\"County\":\"MyCounty\",
\"Country\":\"MyCountry\",\"ZipCode\":\"MyZipCode\",\"Building\":\"MyBuilding\"}"
Volley应用的这种格式似乎改变了我在请求中传递的值,所以有人能告诉我是否有更好的方法来完成这项任务,而且应该相对简单?我使用字符串和整数值向同一服务器发出请求,但在尝试将自定义类作为参数传递时遇到了这个问题。
编辑
使用wbelarmino的提示,我切换到使用hashmap来存储我的自定义对象,并从中创建了一个JSONObject:
HashMap<String, Address> params = new HashMap<String, Address>();
params.put("Address", prop.getAddress());
requestObject = new JSONObject(params);
final RequestQueue requestQueue = Volley.newRequestQueue(this);
final String url ="http://mykulwstc000006.kul/Services/Customer/Register";
Map<String, String> params = new HashMap<String, String>();
params.put("MobileNumber", "+97333765439");
params.put("EmailAddress", "danish.hussain4@das.com");
params.put("FirstName", "Danish2");
params.put("LastName", "Hussain2");
params.put("Country", "BH");
params.put("Language", "EN");
JsonObjectRequest req = new JsonObjectRequest(url, new JSONObject(params),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
VolleyLog.v("Response:%n %s", response.toString(4));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: ", error.getMessage());
}
}){
@Override
public String getBodyContentType() {
return "application/json; charset=utf-8";
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
String username ="eli@gmail.com";
String password = "elie73";
String auth =new String(username + ":" + password);
byte[] data = auth.getBytes();
String base64 = Base64.encodeToString(data, Base64.NO_WRAP);
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Authorization","Basic "+base64);
return headers;
}
};
requestQueue.add(req);
}
您可以尝试以下方法:
final String URL = "/volley/resource/12";
将要发送到服务器的Post参数
HashMap<String, String> params = new HashMap<String, String>();
params.put("token", "AbCdEfGh123456");
JsonObjectRequest req = new JsonObjectRequest(URL, new JSONObject(params),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
VolleyLog.v("Response:%n %s", response.toString(4));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: ", error.getMessage());
}
});
在android中使用Volley查看更多Http请求
在xsl样式表中调用该对象的实例方法,如下所示: 我的问题是:这样做是否恰当?哪种XSLT处理器适合以这种方式使用参数?还有别的办法吗? 我试用了Xalan(org.apache.Xalan.xsltc.trax.TransformerFactoryImpl),但遇到一个异常,即找不到该方法: 该方法是公共的,没有参数。
网上搜索到cpp代码制作自定义的定时器,我制作了测试用的项目,仓库是:https://gitee.com/chanchaw/custom-timer-cc.git 测试下来发现在 main 函数中启动定时任务后,下面的 cout 没有输出到控制台中,是不是意味着定时任务没有创建子线程执行?如果是的话要如何修改代码?
问题内容: 以下工作正常,但是我认为这会全局修改$ httpProvider,这不是我想要的。 反正有这样做吗? “标题”参数似乎被忽略了。请求仍然 我的标头值可以吗? 问题答案: 我已经确认1.1.3确实支持这一点。但是,您需要确保您还获得了资源服务的1.1.3版本。快速测试: 这将发出一个标头设置为(使用Chrome确认)的请求: 快速说明,我无法找到angular- resource.js的
我已经查看了各种答案,但它们并没有解决我的问题。我有一个非常具体的客户需求,我无法使用请求的主体。 我已经检查了这些帖子: 尝试使用Spring Boot REST从POST读取JSON字符串 使用Jackson JSON在Spring MVC中解析JSON 在Rest web方法中传递JSON对象 注意:我确实对URI进行了编码。 我得到各种错误,但非法的超文本标记语言字符是一个。要求很简单:
考虑下面的代码: 对于上面的代码,输出是: