#java #spring #rest #jpa
#java #весна #rest #jpa
Вопрос:
Я следую руководству по http://spring.io/guides/gs/accessing-data-rest / , который для этого похож на hello world… Запросы GET работают отлично, но при попытке POST они предлагают (я использую расширение Rest Client Chrome) с помощью json
{ "firstName" : "Frodo", "lastName" : "Baggins" }
Я получаю следующую ошибку:
{
cause: {
cause: null
message: "Unrecognized token 'firstName': was expecting 'null', 'true', 'false' or NaN at [Source: org.apache.catalina.connector.CoyoteInputStream@29508db1; line: 1, column: 11]"
}
message: "Could not read JSON: Unrecognized token 'firstName': was expecting 'null', 'true', 'false' or NaN at [Source: org.apache.catalina.connector.CoyoteInputStream@29508db1; line: 1, column: 11]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'firstName': was expecting 'null', 'true', 'false' or NaN at [Source: org.apache.catalina.connector.CoyoteInputStream@29508db1; line: 1, column: 11]"
}
Как я могу это исправить? Почему это происходит?
Комментарии:
1. Работает для меня. Приложение настолько простое, что вы можете опубликовать три класса, которые у вас есть.
2. Если вы клонируете проект guide
cd
и./completed
запускаете проект и запускаете его, происходит ли это по-прежнему с использованием того же запроса? Я тоже пробовал и работал нормально…3. Также получаю то же сообщение об ошибке при запросе put с, казалось бы, допустимым строковым содержимым.
4. Мне пришлось вложить содержимое строки в вызов JSON.stringify() . Теперь он работает нормально.
Ответ №1:
Попробуйте проверить, был ли у вас Content-Type:application / json при отправке запроса
Комментарии:
1. да, у меня был этот тип контента при выполнении запроса: (в любом случае спасибо
Ответ №2:
У меня возникли некоторые проблемы с методом POST и Spring, когда включена защита от подделки межсайтовых запросов (csrf) (в spring security — <csrf/>
). Проблема (которая у меня была) заключалась в том, что ошибка, похоже, не указывает на то, что это была проблема, но добавление следующего в мои формы сделало свое дело:
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
Ответ №3:
JSON.stringify() содержимое или просто заключите его в одинарные кавычки, что устранит проблему.
$.ajax({
url : 'http://localhost:8080/people',
type: 'POST',
dataType: 'json',
data: '{"firstName":"xx","lastName":"xx"}',
contentType: 'application/json'
});
Комментарии:
1. Я не делал это из jQuery, и, похоже, это была конфигурация Spring
2. Это невозможно сделать без stringifying. Двойные или одинарные кавычки не имеют значения.