英文:
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: '/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');
}
})
})
}
My programm don't even get till controller. It falls in error block
@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);
}
答案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.
$('#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');
}
})
})
答案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.
专注分享java语言的经验与见解,让所有开发者获益!
评论