Как перестать получать пропущенную ошибку «Обязательные параметры», когда POST-данные с использованием модифицированного Android, так как POSTMAN не показывает эту ошибку? - PullRequest
0 голосов
/ 01 ноября 2019

Я создал тонкую поддержку бэкэнда для моего приложения и определил функцию, которая должна проверять, будут ли параметры, которые будут отправлены, соответствующие параметры должны быть опубликованы. Теперь, когда я отправляю запрос POST с помощью POSTMAN,это выполняется хорошо. Но когда я отправляю запрос, используя модификацию в моем приложении для Android, тогда «требуемые параметры отсутствуют».

Я пытался преобразовать json_decode () для декодирования данных, когда запрашиваемые параметры передаются в функцию checkIfEmpty.

 class CheckEmptyParams{

     function paramsCheck($required_params,$request,$response){

         $error = false;


         $error_params  = '';

         $request_params = $request->getParsedBody();


         foreach($required_params as $param){

             if(!isset($request_params[$param]) || strlen($request_params[$param])<0){

                 $error = true;

                 $error_params .= $param . ',';

             }

         }

         if($error){

                 $error_detail = array();


                 $error_detail['error'] = true;

                 $error_detail['message'] = 'Required Parameters are missing- ' .substr($error_params,0,-1);

                 $response->write(json_encode($error_detail));
                 $response->withHeader('Content-Type','application/json')
                            ->withStatus(422);

             }

         return $error;

     }

 }

$app->post('/userlogin',function(Request $request,Response $response){

$params_check = new CheckEmptyParams;

if(!$params_check->paramsCheck(array('email','password'),$request,$response)){

    $request_data = $request->getParsedBody();
    $email = $request_data['email'];
    $password = $request_data['password'];

    $db = new DbOperations;
    $result = $db->userLogin($email,$password);

    if($result == USER_AUTHENTICATED){
        $response_data = array();

        $response_data['error'] = false;
        $response_data['message'] = 'User Authentication Successful';

        $response->write(json_encode($response_data));

        return $response->withHeader('Content-Type','application/json')
                        ->withStatus(200);
    }
    else if($result == USER_NOT_FOUND){
        $response_data = array();

        $response_data['error'] = true;
        $response_data['message'] = 'User not found';

        $response->write(json_encode($response_data));
        return $response->withHeader('Content-Type','application/json')
                        ->withStatus(422);

    }
    else if($result == USER_PASSWORD_DO_NOT_MATCH){
        $response_data = array();
        $response_data['error'] = true;
        $response_data['message'] = 'Password do not match';
        $response->write(json_encode($response_data));

        return $response->withHeader('Content-Type','application/json')
                        ->withStatus(422);
    }

    $response_data = array();
    $response_data['error'] = true;
    $response_data['message'] = 'Some error occured';
    $response->write(json_encode($response_data));

    return $response->withHeader('Content-Type','application/json')
                    ->withStatus(422);

}});

Я ожидаю, что вывод будет ложным, поскольку логическое значение, возвращаемое этой функцией при отправке запроса POST с использованием модификации.

Код Android -

public interface ApiServices {

@Headers({"Content-Type:application/json"})
@FormUrlEncoded
@POST("userlogin")
Call<LoginModel> getLoginData(@Field("email")String email,
                              @Field("password")String password);

}

private void login(String email,String password){

    final Snackbar mLoading = Snackbar.make(mFrameLayout,"Logging in...Please wait",Snackbar.LENGTH_INDEFINITE);
    mLoading.show();

    ApiClient.getInstance().getApi().getLoginData(email,password).enqueue(new Callback<LoginModel>() {
        @Override
        public void onResponse(Call<LoginModel> call, Response<LoginModel> response) {
            if(getActivity()!=null && isAdded()) {
                if(response.isSuccessful()){
                    mLoading.dismiss();
                    if(response.code()==200){
                        if(!response.body().isError()){
                            Snackbar.make(mFrameLayout,response.body().getMessage(),Snackbar.LENGTH_INDEFINITE).show();
                        }
                        else{
                            Snackbar.make(mFrameLayout,response.body().getMessage(),Snackbar.LENGTH_SHORT).show();
                        }
                    }
                    else if(response.code()==422){
                        Snackbar.make(mFrameLayout, getResources().getString(R.string.text_server_down_error), Snackbar.LENGTH_SHORT).show();
                    }
                }
                else{
                    mLoading.dismiss();
                    Snackbar.make(mFrameLayout, getResources().getString(R.string.text_server_connection_error),Snackbar.LENGTH_SHORT).show();
                }
            }
        }

        @Override
        public void onFailure(Call<LoginModel> call, Throwable t) {
            mLoading.dismiss();
            if(getActivity()!=null&& isAdded()){
                Snackbar.make(mFrameLayout, getResources().getString(R.string.text_server_connection_fail),Snackbar.LENGTH_SHORT).show();
            }
        }
    });
}

Запрос отправляется в POSTMAN, но не в приложении для Android. Запрос отправлен в POSTMAN

...