Получение неверного ответа при попытке отправить запрос - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь отправить запрос на сервер NodeJS, я всегда получаю сообщение Bad Request с кодом состояния 400. Я пытался использовать Postman, чтобы проверить, была ли проблема на сервере, но в Postman это работал правильно.

Я использую OkHttp и пытаюсь отправить такой запрос:

private Request request;
private final OkHttpClient client = new OkHttpClient();
private void makePost(String nameOfProduct, String serialOfProduct, String priceOfProduct, String gender, String uriList, String colors, String sizes) {
    RequestBody requestBody = new MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("name", nameOfProduct)
            .addFormDataPart("serial",serialOfProduct)
            .addFormDataPart("price",priceOfProduct)
            .addFormDataPart("gender",gender)
            .addFormDataPart("color", colors)
            .addFormDataPart("size", sizes)
            .addFormDataPart("imagesUri",uriList)
            .build();
    Log.d("COLROS", colors);

    request = new Request.Builder()
            .url("http://10.0.2.2:4000/products/add")
            .header("Content-Type", "application/json")
            .post(requestBody)
            .build();

    try{
        Response response = client.newCall(request).execute();
        if (!response.isSuccessful()) {
            throw new IOException("Unexpected code " + response);
        }

        Headers responeHeaders = response.headers();
        for (int i = 0; i < responeHeaders.size(); i++) {
            Log.d("iu", "makePost: "+responeHeaders.name(i) + ": " + responeHeaders.value(i));
        }
        Log.d("iu", "makePost: "+response.body().string());
    } catch (IOException e) {
        e.printStackTrace();
    }

}

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Чтобы отправить JSON данные, вы должны построить строку JSON. Я буду использовать здесь библиотеку Gson, убедитесь, что вы включили ее в файл градиента уровня модуля следующим образом:

implementation 'com.google.code.gson:gson:2.8.6'

Затем вам понадобится класс для сериализации в JSON:

public class Order {
    public String name;
    public String serial;
    public int price;
    public String gender;
    //Other fields go here...

    //This empty constructor is required by Gson
    public Order() {}
}

Теперь вы создаете объект этого класса по мере необходимости:

private void makePost(String nameOfProduct, String serialOfProduct, String priceOfProduct, String gender, String uriList, String colors, String sizes) {
    Order order = new Order();
    order.name = nameOfTheProduct;
    order.price = priceOfTheProduct;
    //Fill in other fields here...

    //Now get a JSON data string from this object using Gson:
    Gson gson = new Gson();
    String jsonData = gson.toJson(order);

    public static final MediaType mediaTypeJSON = MediaType.get("application/json; charset=utf-8");

    RequestBody requestBody = RequestBody.create(mediaTypeJSON, jsonData);


    //Build the request
    Request request = new Request.Builder()
        .url("http://10.0.2.2:4000/products/add")
        .post(requestBody)
        .build();

    //Finally send the request as you already do in your code
    //Using the call: Response response = client.newCall(request).execute();
}
0 голосов
/ 21 июня 2020

Вы отправляете данные формы (application / x- www-form-urlencoded), но устанавливаете заголовок как json

Попробуйте удалить строку:

.header("Content-Type", "application/json")

и используйте:

.header("Content-Type", "application/x-www-form-urlencoded")
...