簡體   English   中英

IBM MobileFirst 7.1-從Android客戶端發出請求時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM