如何在Spring 3中通过.getJSON将对象从View传递给控制器

时间:2012-04-23 17:44:17

标签: java jquery spring-mvc getjson

我有这个豆子:

public class RespuestaForm {
    private List<RespuestaUsuario> respuesta;
    private List<Pregunta> pregunta;
    private Long pinId;


    public RespuestaForm() {
    }

    public RespuestaForm(List<Pregunta> pregunta, Long pinId) {
        this.pregunta = pregunta;
        this.pinId = pinId;
    }

    public List<RespuestaUsuario> getRespuesta() {
        return respuesta;
    }

    public void setRespuesta(List<RespuestaUsuario> respuesta) {
        this.respuesta = respuesta;
    }


    public List<Pregunta> getPregunta() {
        return pregunta;
    }

    public void setPregunta(List<Pregunta> pregunta) {
        this.pregunta = pregunta;
    }
    public Long getPinId() {
        return pinId;
    }

    public void setPinId(Long pinId) {
        this.pinId = pinId;
    }

}

我想从我的视图中将RespuestaForm类型的对象传递给控制器​​,所以这就是我在jsp中所做的:

function verificarRespuestasAjax(pregunta, pinId, respuesta, index, array){
    var respuestas ={ "pinId":pinId, 
                      "respuesta": [
                            {"pinId": pinId, "respuesta": "prueba", "preguntaId": pregunta},
                            {"pinId": 3, "respuesta": "Hola", "preguntaId": pregunta}                         
                    ]};

    $.getJSON("../usuarios/comparar_respuestas_JSON", {respuestas: respuestas}, function(verifRespuestas){
        if(verifRespuestas){
            ## etc...
    });
}

这是控制器中的方法:

@RequestMapping(value="/usuarios/comparar_respuestas_JSON")
public @ResponseBody boolean compararRespuestas(@RequestBody RespuestaForm respuestas){
    try{
        //here I should get the object RespuestaForm
    }catch(Exception e){
        e.printStackTrace();
    }
    return false;
}

但我无法获得RespuestaForm对象。

我做错了什么?

提前致谢!

1 个答案:

答案 0 :(得分:2)

如果你想使用@RequestBody,那么我认为json应该作为POST而不是GET发送。

这将触发Spring的MappingJacksonHttpMessageConverter(假设你的类路径上有Jackson)。我不记得你是否需要在ObjectMapper中设置RespuestaForm类。首先,你可以尝试没有它,看它是否有效。它没有,那么你可以尝试在其setter上用@JsonProperty注释你的RespuestaForm对象,这样映射器就知道Json对象的哪个字段转到你班级的setter方法。