简体   繁体   中英

IBM MobileFirst 7.1 - Error when making request from Android Client

When making a call to an MFP adapter, i'm getting this response

{  
   "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":[  

   ]
}

The thing is, when i make the same request to my websphere server through a browser, or calling the adapter directly from eclipse I get the expected response.

Relevant Android code

The call to the MFP server

public static void validateUserId(MobileFirstActivity activity, String userId, boolean saveUserId,
                                      WLResponseListener listener) {
        ValidateUserIdRequest validateUserIdRequest = new ValidateUserIdRequest(userId, saveUserId);
        activity.performResourceRequest(validateUserIdRequest, listener);
    }

The ValidateUserIdRequest object

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;
}

The method that actual performs the request

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();
        }
    }
}

The utility method that converts the String[] params to a compatible 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();
    }

convertMapToParamString gives me this as a result as per the documentation for Javascript based adapters

['mbltest3','1.0','false','Android']

I get the correct parameters on my MFP server, but the request is still bad. What else could I try?

原来我请求的Cookie没有正确附加,导致出现400错误。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM