我如何在我的截击请求的正文中发送此请求, 提前谢谢
{
"amount": "000",
"card": {
"number": "00000",
"expiry_month": "00",
"expiry_year": "00",
"cvv": "000",
"pin": "000"
}
}
这是我的请求参数,我试过这个api告诉我无效的参数,请guzs帮帮我
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", User_Token);
headers.put("Content-Type", "application/json");
return headers;
}
@Override
public String getBodyContentType() {
return "application/json";
}
@Override
public byte[] getBody() {
Map<String, String> params = new HashMap<String, String>();
params.put( "amount", amount);
params.put( "card", String.valueOf(come()));
return new JSONObject(params).toString().getBytes();
}
private byte[] come() {
Map<String, String> params = new HashMap<String, String>();
params.put( "number", number);
params.put( "expiry_month", month);
params.put( "expiry_year", year);
params.put( "cvv", cvv);
params.put( "pin", pin);
return new JSONObject(params).toString().getBytes();
}
答案 0 :(得分:0)
使用JsonObject
代替:{创建Map
,将其转换为Byte[]
,然后获取其String.valueOf(...)
。
这将允许您将整个对象作为请求的正文发送,而不是立即发送的不完整正文:{"amount":"000","card":"[B@a2e...."}
)
"card"
:"[B@a2e...."
发送的值的问题在于它不是您的对象及其属性的表示。相反,它只是您创建的字节数组的内存地址。
在您的代码中,对您的对象使用JsonObject
,并且仅在Byte[]
方法结束时转换为getBody()
,因为这是您最终返回完整对象的位置:
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", User_Token);
// headers.put("Content-Type", "application/json"); // This is probably redundant, as you are already setting it on getBodyContentType()
return headers;
}
@Override
public String getBodyContentType() {
return "application/json";
}
@Override
public byte[] getBody() {
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("amount", amount);
jsonObject.put("card", come());
} catch (JSONException e) {
e.printStackTrace();
}
return jsonObject.toString().getBytes();
}
private JSONObject come() throws JSONException {
JSONObject params = new JSONObject();
params.put( "number", number);
params.put( "expiry_month", month);
params.put( "expiry_year", year);
params.put( "cvv", cvv);
params.put( "pin", pin);
return params;
}
答案 1 :(得分:0)
如果您需要确切的格式,则需要确保 function loadPosts() {
var dataArray = new Array();
var root = 'https://jsonplaceholder.typicode.com';
$.ajax({
url: root + '/posts/',
method: 'GET',
async:false,// <--
success:function(msg){
dataArray = msg;
}
});
console.log(dataArray);
} window.onload = loadPosts;
,number
等的值作为字符串而不是整数传递。
此外,为了使代码看起来更短,破坏性更小,您可以链接month
次调用。这是一个有点重构的版本:
put
我不知道@Override
public byte[] getBody() {
try {
final JSONObject card = new JSONObject()
.put("number", String.valueOf(number))
.put("expiry_month", String.valueOf(month))
.put("expiry_year", String.valueOf(year))
.put("cvv", String.valueOf(cvv))
.put("pin", String.valueOf(pin));
return new JSONObject()
.put("amount", String.valueOf(amount))
.put("card", card)
.toString()
.getBytes();
} catch (JSONException e) {
e.printStackTrace();
}
//Empty json return will not help us as in this case
//we will send useless empty body to the server.
return null;
}
的来电方面发生了什么,以及您是否能够修改该代码。但是你需要以某种方式跟踪getBody()
返回,或者引入你自己的异常类,应该在null
调用者端进行检查。但是如果你无法控制getBody()
来电者,你需要返回一些非getBody()
,空回报:
null