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
     })
Другие вопросы по тегам