ajax post to spring mvc добавляет знак "=" для запроса данных
Я пытаюсь опубликовать данные через AJAX сообщение для контроллера Spring. Мой код ajax
function postData(tag){
console.debug(tag);
var targetUrl = "/add/tag";
$.ajax({
url : targetUrl,
type : "POST",
data : tag,
dataType : "text",
success : function(response){
console.debug(response);
},
error : function(){
console.debug("error : ".concat(response));
}
});
}
и мой код контроллера
@RequestMapping(value = "/add/tag", method = POST, consumes = { "application/json" },headers = "content-type=application/x-www-form-urlencoded")
@ResponseBody
public Integer addTag(HttpServletRequest request,
@PathVariable("uid") String gatheringUid, @RequestBody String tag) {
System.out.print(tag);
return gatheringService.updateGathering(gatheringUid, tags);
}
на стороне сервера он печатает значение тега, к которому добавляется знак "=", в то время как на консоли firebug значение выводится по мере ввода.
Например, когда я публикую данные "test", на консоли Firebug выводится "test", а на консоли на стороне сервера - "test =".
Может ли кто-нибудь любезно сказать мне, в чем здесь проблема.
Заранее спасибо, привет.
1 ответ
Это является следствием отправки AJAX вашего POST с типом контента: application/x-www-form-urlencoded
,
Весна использует StringHttpMessageConverter
разрешить аргумент для привязки к @RequestBody
аннотированный String
параметр. Внутренне это проверяет, был ли запрос формой POST. Если это так, он десериализует все тело, как если бы это была форма представления. В этом случае одно слово text
появляется, как будто это был, например, один <input>
элемент без значения, т.е. text=
,
Если вам интересно, это делается в ServletServerHttpRequest#getBodyFromServletRequestParameters(..)
,
Измените ваш тип контента на что-то более подходящее, может быть text/plain
, Не использовать dataType
, использование contentType
или headers
,
К вашему сведению, основываясь на ответе Сотириоса, в коде Ajax jQuery работало следующее.
$.ajax({
type : "post",
dataType : 'json',
contentType : 'text/plain', // This was added to delete the =
url : 'myURL',
data : id
})