我正在使用SpringBoot和Jquery与Ajax编写CRUD应用程序。我遇到了以下异常。

huangapple 未分类评论50阅读模式
英文:

I'm writing a crud application using SpringBoot and Jquery with Ajax. And I'm getting the following exception

问题

我正在使用SpringBoot和带有Ajax的JQuery编写一个CRUD应用程序。我遇到了以下异常:
(在尝试添加新用户时遇到异常)

.HttpMessageNotReadableException:JSON解析错误:无法将START_ARRAY令牌解组为“ru.javamentor.predproject3.model.User”的实例;嵌套异常是
com.fasterxml.jackson.databind.exc.MismatchedInputException:无法将START_ARRAY令牌解组为“ru.javamentor.predproject3.model.User”的实例
在[源:(PushbackInputStream);行:1,列:1]

以下是我的JavaScript代码。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();

    $.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("/adding")
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);
}
英文:

I'm writing a crud application using SpringBoot and Jquery with Ajax. And I'm getting the following exception:
(I'm getting an exception when I'm trying to add a new user)

.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]]

Here is my js. GET method works fine.

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

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

            userData += &#39;&lt;/tr&gt;&#39;;
        });

        $(&#39;#userTable2&#39;).html(userData);
    },

    error: function (error) {
        alert(&quot;Error&quot;);
    }
})
}

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

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

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

My programm don't even get till controller. It falls in error block

@PostMapping("/adding")

public ResponseEntity&lt;User&gt; addingPost(@RequestBody User user) {

    HttpHeaders httpHeaders = new HttpHeaders();

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

    userService.addUser(user);

    return new ResponseEntity&lt;&gt;(user, httpHeaders, HttpStatus.CREATED);
}

答案1

得分: 0

我如果能看到你发布的控制器,或许能提供更好的建议。
看起来你正在将一个 JSON 字符串反序列化为 JSON 对象。
如果是这样的话,你的 JSON 字符串可能格式错误,有可能初始的花括号缺失。

编辑过的部分:

我仔细检查了一下,我认为你的问题出在 JavaScript 代码中。

$('#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('用户已成功添加');
            gettingListOfUsers();
        },
        error: function () {
            alert('错误');
        }
    })
})
英文:

I could have a better idea if you post your controller.
It seems like you are deserializing a json string into json object.
If that is true, you have a malformed json string, it is possible you don't have initial curly brace.

EDITED

I double checked and I think your issue is in JS code.

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

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

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

答案2

得分: 0

错误消息显示了问题所在。它希望根据一段 JSON 数据(期望是一个 JSON 对象)创建一个用户,但你从请求中发送的字符串以 [ 开头,这表示一个数组。

英文:

The error message says exactly what's wrong. It wants to create a User out of a piece of jason (expecting a jason object), but the string you send from the request starts with [, which denotes an array.

huangapple
  • 本文由 发表于 2020年5月30日 01:03:05
  • 转载请务必保留本文链接:https://java.coder-hub.com/62091127.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定