Я пытаюсь отправить запрос POST сервлету. Запрос отправляется через jQuery следующим образом:
var productCategory = new Object();
productCategory.idProductCategory = 1;
productCategory.description = "Descrizione2";
newCategory(productCategory);
где новая категория
function newCategory(productCategory)
{
$.postJSON("ajax/newproductcategory", productCategory, function(
idProductCategory)
{
console.debug("Inserted: " + idProductCategory);
});
}
и postJSON это
$.postJSON = function(url, data, callback) {
return jQuery.ajax({
'type': 'POST',
'url': url,
'contentType': 'application/json',
'data': JSON.stringify(data),
'dataType': 'json',
'success': callback
});
};
С Firebug я вижу, что JSON отправляется правильно:
{"idProductCategory":1,"description":"Descrizione2"}
Но я получаю 415 неподдерживаемый тип носителя. Spring mvc контроллер имеет подпись
@RequestMapping(value = "/ajax/newproductcategory", method = RequestMethod.POST)
public @ResponseBody
Integer newProductCategory(HttpServletRequest request,
@RequestBody ProductCategory productCategory)
Несколько дней назад это работало, сейчас нет. Я покажу больше кода, если это необходимо. Спасибо
var productCategory = { idProductCategory: 1, description: "Descrizione2" };
будет более кратким и легким для чтения? Вы должны сказать Spring, чтобы принятьapplication/json
конкретно? Другими словами, это ожидает, что данные придут в форме?Ответы:
Я имел это раньше с Spring @ResponseBody, и это было потому, что не было отправлено заголовка accept с запросом. Заголовок Accept может быть неудобно устанавливать с помощью jQuery, но это работает для меня источник
Заголовок Content-Type используется @RequestBody для определения формата данных, отправляемых клиентом в запросе. Заголовок accept используется @ResponseBody, чтобы определить, в каком формате отправлять данные обратно клиенту в ответе. Вот почему вам нужны оба заголовка.
источник
добавление типа контента в запрос как
application/json
решило проблемуисточник
У меня была похожая проблема, но я обнаружил, что проблема в том, что я забыл предоставить конструктор по умолчанию для DTO, аннотированный @RequestBody.
источник
Я считаю, что столкнулся точно с той же проблемой. После бесчисленных часов борьбы с JSON, JavaScript и сервером я нашел виновника: в моем случае у меня был объект Date в DTO, этот объект Date был преобразован в строку, чтобы мы могли показать его в представлении с Формат: ЧЧ: мм.
Когда информация JSON отправлялась обратно, этот объект Date String необходимо было преобразовать обратно в полный объект Date, поэтому нам также необходим метод для его установки в DTO. Большое НО в том, что в DTO нельзя иметь 2 метода с одинаковым именем (Overload), даже если они имеют другой тип параметра (String vs Date), поскольку это также приведет к ошибке 415 Unsupported Media type.
Это был мой метод контроллера
Это был мой пример DTO (методы id get / set и preAlarm get не включены для краткости кода):
Чтобы все работало, вам нужно удалить метод с параметром Тип даты. Эта ошибка очень расстраивает. Надеюсь, что это может сэкономить кому-то часы отладки.
источник
public void setParameters(List<Parameter> parameters)
иpublic void setParameters(Parameter... parameters)
методы в бобе, изменяя последнемуaddParameters
решен вопрос для меня.Я столкнулся с подобной проблемой, и вот как я это исправил,
Проблема заключается в том, что процесс преобразования из JSON в Java требует правильных библиотек времени выполнения, чтобы преобразование происходило правильно.
Добавьте следующие jar-файлы (через зависимости или загрузив и добавив в classpath.
Это должно решить проблему.
Полный код:
и подпись контроллера выглядит так:
Надеюсь это поможет
источник
jackson-databind
Требуется только .Я столкнулся с этой проблемой, когда я интегрировал пружинный ботинок с пружинным MVC. Я решил это, просто добавив эти зависимости.
источник
Небольшое примечание - наткнулся на эту же ошибку при разработке веб-приложения. Ошибка, которую мы обнаружили, играя с сервисом Firefox Poster, заключалась в том, что поля и значения в Json должны быть заключены в двойные кавычки. Например..
В нашем случае мы заполнили json с помощью javascript, что может немного сбивать с толку, когда речь идет о работе с одинарными / двойными кавычками, насколько я слышал.
То, что было сказано ранее в этой и других публикациях, включая заголовки «Принять» и «Тип контента», также применимо.
Надеюсь, что поможет.
источник
Мне удалось, как заставить это работать. Скажите мне, если я ошибаюсь. Я использовал только один способ сериализации / десериализации: я удалил все аннотации относительно этого (
@JSONSerialize
и@JSONDeserialize
) и зарегистрированных сериализаторов и десериализаторов вCustomObjectMapper
классе. Я не нашел статью, объясняющую это поведение, но решил это таким образом. Надеюсь, это полезно.источник
У меня такая же проблема. Мне пришлось выполнить следующие шаги, чтобы решить эту проблему:
1. Убедитесь, что у вас есть следующие зависимости:
2. Создайте следующий фильтр:
3. Примените вышеупомянутый фильтр для запросов в web.xml
Надеюсь, это кому-нибудь пригодится.
источник
jackson-core
является зависимость отjackson-databind
, так что нет необходимости добавлять его непосредственно.Пружинный ботинок + весенний мвн
с проблемой
с решением
источник
Я решил эту проблему, добавив привязку данных jackson-json к моему pom.
источник
В свой класс модели добавьте аннотацию свойства json, также есть конструктор по умолчанию
источник
Я была такая же проблема. добавление
к весне-хмл решил
источник
1.a. Добавьте следующее в applicationContext-mvc.xml
xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemaLocation = " http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc
источник