Spring控制器方法不识别jquery .ajax()函数传递的参数

时间:2014-03-23 11:25:33

标签: javascript jquery ajax spring spring-mvc

在我的项目中,我有以下.ajax()函数,它应该将具有多个值的内容发送到服务器:

$("#btn_enviar").click(function(){
    var selecao_usuario=[];
    $('#selecao option').each(function(){
        selecao_usuario.push($(this).val());
    });
    $.ajax({
        url: "lista_horario.html",
        data: { id_usuarios: selecao_usuario, id_evento: $('#id_evento option:selected').val() },
        cache: false
    }).done(function(data) {
        $("#result").show();
        $("#result").empty().append( data );
    });
});

根据浏览器控制台,这是该函数发送给服务器的参数:

id_evento "1"
id_usuarios[] "9"
id_usuarios[] "4"
id_usuarios[] "7"
id_usuarios[] "8"

因为这最后一个参数,我从服务器收到此错误:

HTTP Status 400 - Required String[] parameter 'id_usuarios' is not present

type Status report

message Required String[] parameter 'id_usuarios' is not present

description The request sent by the client was syntactically incorrect.
Apache Tomcat/7.0.42

上面的函数是从我的spring控制器发送此方法的数据:

@RequestMapping(value="/lista_horario", method=RequestMethod.GET)
@ResponseBody
public String lista_horario(@RequestParam("id_evento") String id_evento, @RequestParam("id_usuarios") String[] usuarios)
{
     ...
     }

2 个答案:

答案 0 :(得分:1)

Spring MVC中的Param名称必须与请求中的param名称匹配。在您的情况下,将参数名称从@RequestParam("id_usuarios")更改为@RequestParam("id_usuarios[]")

答案 1 :(得分:0)

由于cache: false调用中的ajax选项,最后一个参数已发送。为了防止缓存响应,jQuery添加了参数_,其值等于当前时间戳(Date.now()的结果)。这样,请求总是不同的,并且不会被浏览器缓存。如果它导致问题,请通过服务器响应标头禁用缓存,并从您对cache的调用中删除ajax()参数。但是,我不确定这就是您收到错误的原因。尝试删除参数,看看它是否有效。