Как подключить string REST к JPA?

#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. Двойные или одинарные кавычки не имеют значения.