Неверный запрос AJAX-сообщения в Spring API - PullRequest
0 голосов
/ 29 апреля 2019

Я отправляю данные JSON в Spring API, но всегда получаю неверный запрос. Я попробовал некоторые вещи. Сначала chanceReward был типа Map<String, Object>. Позже я подумал, что это должен быть String, но запрос все равно был неверным. Я исследовал и подумал, что мне нужно consumes = "application/json" в аннотации, но результат тот же. Не уверен больше, что делать. Ниже приведен код моего API:

@RequestMapping(value = "/chance/{id}/saveChanceRewards", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
public @ResponseBody Map<String, Object> saveChanceRewards(@PathVariable("id") String id,
        @RequestBody String chanceRewards) {

    try {
        JSONArray jsonArray = new JSONArray(chanceRewards);
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject JObject = jsonArray.getJSONObject(i);
            System.out.println(JObject.getString("name") + " " + JObject.getString("weight"));
        }
    } catch(JSONException e) {
        _log.error("Error parsing JSON");
    }

    Map<String, Object> map = new HashMap<String, Object>();
    // TODO

    return map;
}

Ниже приведен код Ajax (внутри .jsp):

    let arrayRewards = [];
    // get the data from dynamic list of text fields
    for (let i = 1; i <= chanceRewardCount; i++) {
        arrayRewards.push({
            name: $('#chanceRewardName' + i).val(),
            weight: $('#chanceRewardWeight' + i).val()
        });
    }

    let data = {'data': arrayRewards};
    let jsonData = JSON.stringify(data);

    $.ajax({
        type: 'post',
        dataType: "json",
        data: data,
        contentType: 'application/json',    
        url: "${home}/chance/${id}/saveChanceRewards",
        method: 'post',
        success: function(response) {
            console.log('response', response);  
        },
        error: function(err) {
            console.log('error', err);
        }
    });

Я использую Spring Framework 3.2.1.

Ответы [ 3 ]

1 голос
/ 29 апреля 2019

Ошибка 400 Bad Request - это код состояния HTTP, который означает, что запрос, отправленный вами на сервер веб-сайта, часто такой простой, как запрос на загрузку веб-страницы, был каким-то неправильным или поврежденным, и сервер не мог 'Я не понимаю.

Это означает, что сервер не может понять запрос от вашего ajax.

Сначала измените @RequestBody String chanceRewards на @RequestBody ChanceRewards chanceRewards

Иопределить ChanceRewards и ChanceReward класс.

class ChanceReward {

    private String name;

    private String weight;

    // Getter Setter ...

}

class ChanceRewards {

    private List<ChanceReward> data;

    // Getter Setter ...

}

Если все еще не получилось, попробуйте открыть режим проверки и нажать вкладку сети, чтобы проверить запрос, отправленный с ajax.

0 голосов
/ 29 апреля 2019

Здесь происходит довольно много вещей, поэтому давайте поработаем над ними!

Во-первых, я вижу, что вы преобразовали данные в jsonData, но вместо этого ваш фактический пост ajax имеет data: data,Легко исправить, просто замените нужную переменную.

Второе, что я заметил, это то, что вы оборачиваете массив вознаграждений в объект data = {'data': arrayRewards}), но ваш код Java ожидает сам массив (JSONArray) прямо из тела запроса.Так что это также бросит исключение.Вам не нужно оборачивать массив объектом, если он не нужен.

Наконец, вы упоминаете, что всегда получаете «неверный запрос», но что именно вы имеете в виду?Ошибка «HTTP 400»?Другая ошибка HTTP?Может быть полезно дать больше информации о точных ошибках, которые вы видите на стороне javascript и на стороне сервера Java.

Все остальные вещи, такие как беспокойство по поводу создания ChanceRewardКласс / ChanceRewards, принимающий / потребляющий / создающий заголовки и т. Д., В данный момент является излишним.Они типичные тонкости, и вам не нужно ни одного из них для правильной работы.

0 голосов
/ 29 апреля 2019

Замените двойные кавычки в вашем url: "${home}/chance/${id}/saveChanceRewards", на backtick.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...