Я пишу приложение crud с использованием SpringBoot и Jquery с Ajax. И я получаю следующее исключение - PullRequest
0 голосов
/ 29 мая 2020

Я пишу приложение crud с использованием SpringBoot и Jquery с Ajax. И я получаю следующее исключение: (Я получаю исключение, когда пытаюсь добавить нового пользователя)

.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of 
`ru.javamentor.predproject3.model.User` out of START_ARRAY token; nested exception is 
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of 
`ru.javamentor.predproject3.model.User` out of START_ARRAY token
at [Source: (PushbackInputStream); line: 1, column: 1]]

Вот мой js. Метод GET работает нормально.

$(document).ready(function () {
  gettingListOfUsers();
  addingUser();
});

function gettingListOfUsers() {
  $.ajax({
     url: '/rest/users',
     type: 'GET',
     dataType: 'json',
     success: function (listOfUsers) {
        let userData = '';
        $.each(listOfUsers, function (index, user) {
            userData += '<tr>';
            userData += '<td>' + user.id + '</td>';
            userData += '<td>' + user.firstName + '</td>';
            userData += '<td>' + user.secondName + '</td>';
            userData += '<td>' + user.email + '</td>';
            userData += '<td>' + user.role + '</td>';
            userData += '<td> <button class="btn btn-info" data-toggle="modal">update</button> ' +
                '<a class="btn btn-danger" onclick="if (!(confirm(\'Are you sure you want to delete this user?\'))) ' +
                'return false">delete</a></td>';

            userData += '</tr>';
        });

        $('#userTable2').html(userData);
    },

    error: function (error) {
        alert("Error");
    }
})
}

function addingUser() {
$('#addingButton').on('click', function (event) {
    event.preventDefault();

    const addingFormData = $('#addingUserForm').serializeArray();
    // alert(addingFormData.length);

    $.ajax({
        url: '/rest/adding',
        type: 'POST',
        data: JSON.stringify(addingFormData),
        dataType: 'json',
        contentType: "application/json",
        success: function (responseData, status, jqXHR) {
            alert('User has been added successfully');
            gettingListOfUsers();
        },
        error: function () {
            alert('Error');
        }
    })
})
}

Моя программа даже не доходит до контроллера. Попадает в блок ошибок

@ PostMapping ("/ добавление")

public ResponseEntity<User> addingPost(@RequestBody User user) {

    HttpHeaders httpHeaders = new HttpHeaders();

    user.setPassword(passwordEncoder.encode(user.getPassword()));

    userService.addUser(user);

    return new ResponseEntity<>(user, httpHeaders, HttpStatus.CREATED);
}

Ответы [ 2 ]

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

В сообщении об ошибке указано, что именно не так. Он хочет создать пользователя из куска jason (ожидая объект jason), но строка, которую вы отправляете из запроса, начинается с [, что обозначает массив.

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

У меня есть идея получше, если вы разместите свой контроллер. Похоже, вы десериализуете строку json в объект json. Если это правда, у вас искаженная строка json, возможно, у вас нет начальной фигурной скобки.

EDITED

Я дважды проверил и думаю, что ваша проблема в коде JS.

$('#addingButton').on('click', function (event) {
    event.preventDefault();

    const addingFormData = $('#addingUserForm').serialize();
    // alert(addingFormData.length);

    $.ajax({
        url: '/rest/adding',
        type: 'POST',
        data: addingFormData,
        dataType: 'json',
        contentType: "application/json",
        success: function (responseData, status, jqXHR) {
            alert('User has been added successfully');
            gettingListOfUsers();
        },
        error: function () {
            alert('Error');
        }
    })
})
...