Retrofit 400 Bad Request при публикации остальных API - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь использовать веб-API, написанный на asp. net ядро ​​2.2 в android, используя Retrofit rest client. успешно получает данные от Api, но не может отправить данные на сервер с помощью Retrofit. webapi работает нормально через почтальона и Javascript.

вот что я пробовал ..

Мой класс активности

    private Retrofit retrofit = new Retrofit.Builder().baseUrl("https://sga.somee.com/api/")
        .addConverterFactory(ScalarsConverterFactory.create()).addConverterFactory(GsonConverterFactory.create()).build();
    private ShopApi _shopsApi;
    //constructor
    public MainActivity2(){
        //api classes must be initialized in constructors
         _shopsApi = retrofit.create(ShopApi.class);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
   Shop _shop = new Shop();
        _shop.shop_name = "Starbucks";
        _shop.shop_owner = "Unknown";
        _shop.shop_longitude = 49545.3455;
        _shop.shop_latitude = 55353.554;
        _shop.shop_image = "path/path.png";
        PostShop(_shop);
    }
    public void PostShop(Shop shop){
        /*
        JsonObject obj = new JsonObject();
        obj.addProperty("shop_name",shop.shop_name);
        obj.addProperty("shop_owner",shop.shop_owner);
        obj.addProperty("shop_longitude",shop.shop_longitude);
        obj.addProperty("shop_latitude",shop.shop_latitude);
        obj.addProperty("shop_image",shop.shop_image);
        Log.d(TAG, obj.toString());
         */
        Call<ResponseBody> AddShop = _shopsApi.AddShop(shop);
        AddShop.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                Toast.makeText(MainActivity2.this,response.raw().body().toString(),Toast.LENGTH_LONG).show();
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Toast.makeText(MainActivity2.this,"Failded to add new shop",Toast.LENGTH_LONG).show();
            }
        });
    }

My ShopApi Class

package com.example.madee.sga.API;

import com.example.madee.sga.Models.Shop;

import java.util.List;

import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Path;

public interface ShopApi {
    @GET("Shops/GetAll/{page}")
    Call<List<Shop>> GetAllShops(@Path("page") int page );


    @Headers({"Content-Type: application/json"})
    @POST("Shops/AddNew")
    Call<ResponseBody> AddShop(@Body Shop _shop);

}

Вы также можете видеть, что я тоже пытался опубликовать данные с JsonObject в MainActivity, но тот же сбой 400 Bad Requset

1 Ответ

0 голосов
/ 04 мая 2020

Эта ошибка возникает из-за того, что вы задали параметры в теле запроса POST . Добавить Paramtere, как это.

@Headers({"Content-Type: application/json"})
@FormUrlEncoded
@POST("Shops/AddNew")
Call<ResponseBody> AddShop(@Field("ShopName") String ShopName,  @Field("OwnerName") String OwnerName, @Field("Longitude") int Longitude,@Field("Latitude") int Latitude,@Field("Imagepath") String Imagepath,@Field("ShopId") String ShopId);

И вызовите эту функцию как:

Call<ResponseBody> AddShop = _shopsApi.AddShop(shop.shop_name, shop.shop_owner, shop.shop_longitude, shop.shop_latitude, shop.shop_image,shop.shop_id);

И я предположил, что ваш сервер принимает то же имя параметра, что и вы, написанные в коде. если это не то же самое, измените его соответственно.

...