[英]IBM MobileFirst 7.1 - Error when making request from Android Client
呼叫MFP適配器時,我收到此響應
{
"statusCode":400,
"errors":[
],
"isSuccessful":true,
"statusReason":"Bad Request",
"html":{
"body":"",
"html":"http://www.w3.org/1999/xhtml",
"xmlns":"http://www.w3.org/1999/xhtml"
},
"responseHeaders":{
"Content-Language":"en-US",
"Date":"Thu, 11 Feb 2016 14:47:03 GMT",
"Content-Length":"0",
"Expires":"Thu, 01 Dec 1994 16:00:00 GMT",
"Set-Cookie":[
"JSESSIONID=0000e8OwOu5nRy5GHcnq5aOyJ6W:-1; Path=/; HttpOnly",
"JSESSIONID=0000kr3JjAeXlHQyeCFsWm9Sagx:-1; Path=/; HttpOnly"
],
"Connection":"Close",
"X-Powered-By":"Servlet/3.0",
"Cache-Control":"no-cache=\"set-cookie, set-cookie2\""
},
"warnings":[
],
"totalTime":200,
"responseTime":198,
"authRequired":true,
"info":[
]
}
問題是,當我通過瀏覽器向我的Websphere服務器發出相同的請求,或者直接從eclipse調用適配器時,得到了預期的響應。
相關的Android代碼
對MFP服務器的呼叫
public static void validateUserId(MobileFirstActivity activity, String userId, boolean saveUserId,
WLResponseListener listener) {
ValidateUserIdRequest validateUserIdRequest = new ValidateUserIdRequest(userId, saveUserId);
activity.performResourceRequest(validateUserIdRequest, listener);
}
ValidateUserIdRequest對象
class ValidateUserIdRequest implements ResourceRequest {
private final String userId;
private static final String appVersion = BuildConfig.VERSION_NAME;
private final String saveUserId;
private static final String devicePrint = "Android";
public ValidateUserIdRequest(String userId, boolean saveUserId) {
this.userId = userId;
this.saveUserId = String.valueOf(saveUserId);
}
@Override
public int setEndpointResource() {
return R.string.ValidateUserId;
}
@Override
public void setParams(WLResourceRequest resourceRequest) {
resourceRequest.setQueryParameter("params",
ResourceUtils.convertMapToParamString(
userId, appVersion, saveUserId, devicePrint));
}
@Override
public String setRequestMethod() {
return WLResourceRequest.GET;
}
實際執行請求的方法
public void performResourceRequest(final ResourceRequest resourceRequest, final WLResponseListener listener) {
if (!isConnectedToMfpServer) {
connectToMfpServer(new WLResponseListener() {
@Override
public void onSuccess(WLResponse wlResponse) {
isConnectedToMfpServer = true;
performResourceRequest(resourceRequest, listener);
}
@Override
public void onFailure(WLFailResponse wlFailResponse) {
isConnectedToMfpServer = false;
listener.onFailure(wlFailResponse);
}
});
} else {
try {
URI endpoint = new URI(getString(resourceRequest.setEndpointResource()));
WLResourceRequest request = new WLResourceRequest(endpoint, resourceRequest.setRequestMethod());
resourceRequest.setParams(request);
request.send(listener);
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
將String []參數轉換為兼容字符串的實用程序方法。
public static String convertMapToParamString(String... params) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("[");
for (int i = 0; i < params.length; i++) {
stringBuilder.append("'").append(params[i]).append("'");
if (i != (params.length - 1)) {
stringBuilder.append(",");
}
}
stringBuilder.append("]");
return stringBuilder.toString();
}
結果 基於基於Java的適配器的文檔, convertMapToParamString給了我這個結果
['mbltest3','1.0','false','Android']
我在MFP服務器上獲得了正確的參數,但是請求仍然很糟糕。 我還能嘗試什么?
原來我請求的Cookie沒有正確附加,導致出現400錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.