Обязательный параметр String отсутствует - PullRequest
0 голосов
/ 06 мая 2019

Я хочу отправить запрос из моих приложений для Android в Spring Boot.Я использую okhttp для отправки HTTP-запроса на публикацию в формате JSON.Код выглядит так:

Каждый раз, когда я отправляю пост-запрос с помощью запроса Android, я получаю 400 неверных параметров запроса: «имя» отсутствует »,« путь »:« / newcustomer ». Но когда я использую почтальонэто работает.

    Java
    ----------------------------------------------------------------
    Log.d("okhttphandleruserreg", "called");
    MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    JSONObject jsonObject = new JSONObject();
    try{
        jsonObject.put("name", name);
        jsonObject.put("email", email);
        jsonObject.put("username", username);
        jsonObject.put("password", password);
        jsonObject.put("month", month);
        jsonObject.put("dayOfMonth", dayOfMonth);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    RequestBody body = RequestBody.create(JSON, jsonObject.toString());

    Request.Builder builder = new Request.Builder();
    builder.url(params[0]);
    builder.post(body);
    Request request = builder.build();

    Spring Boot
    -----------------------------------------------------------------
    @RequestMapping(value = "/newcustomer", method= RequestMethod.POST)
    public Customer newCust(@RequestParam(value="name") String name,
                        @RequestParam(value="email") String email,
                        @RequestParam(value="username") String username,
                        @RequestParam(value="password") String password,
                        @RequestParam(value="month") int month,
                        @RequestParam(value="dayOfMonth") int dayOfMonth
)

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

То, как вы реализовали свой бэкэнд / newcustomer API, предполагает, что вы ожидаете, что полезная нагрузка запроса будет необработанными параметрами запроса в данных формы запроса.

Предполагая, что API на стороне сервера является вашим контрактом, поэтому он должен оставаться как есть, ваш код клиента должен быть обновлен следующим образом:

Log.d("okhttphandleruserreg", "called");

// here you create your request body as as a Form one
RequestBody formBody = new FormBody.Builder()
  .add("name", "test")
  .add("email", "test@domain.com")
  .add("username", "test")
  .add("username", "test")
  .add("month", "january")
  .add("dayOfMonth", "1")
  .build();

Request request = new Request.Builder()
  .url(params[0])
  .post(formBody)
  .build();

// call your request
0 голосов
/ 06 мая 2019

Вы используете параметры запроса в Spring Boot, но в коде Android вы отправляете это как тело запроса.

Пожалуйста, измените любой из вышеперечисленных.Лучше, если вы используете RequestBody в обоих местах.

class Customer
{
String name:
String email:
String username;
String password;
int month;
int dayofthemonth;

//getter and setters
}

public Customer newCust(@RequestBody Customer newcustomer)
{
}
...