Passar uma lista com ajax para Spring Controller

Boa noite pessoal,

Estou com o seguinte problema, estou desenvolvendo com Spring MVC e JQuery com Ajax para a comunicação do meu Controller com meu Form. Em determinado momento eu tenho que fazer uma busca e para isso eu tenho que passar uma lista com alguns parâmetros para o meu Controller. Eu tentei criar uma lista na mão em javascript e passar essa lista para meu controller, porém não estou tendo sucesso. Outra coisa que eu tentei também é transformar essa minha lista em um json e receber como String e depois deserializar, mas também sem sucesso.

Alguém saberia me dizer como posso fazer isso?

Obrigada

Bjs!

Cara já fiz algo parecido com isso mas tá em casa. Usando JQuery vc consegue fazer uma requisição ajax. No seu controller vc deve colocar a anotação @ResponseBody para que o Spring saiba q não deverá retornar uma view, apenas um JSON (supondo q vc está utilizando JSON). Vc deve criar um script (javascript) para tratar o retorno.

Fiz um cadastro de usuários. Toh usando uma biblioteca pra validação q usa jquery. Criei o seguinte script q valida o formulário antes de enviar:

function validarFormulario(){ $('#usuario').validate({ rules:{ nome:{required: true, rangelength:[3,50]}, sobrenome:{required: true, rangelength:[3,50]}, username:{required: true, rangelength:[3,25]}, password:{required: true, rangelength:[6,30]}, repSenha:{required: true, equalTo: "#password"}, email: {required: true, email: true} }, submitHandler: function(form){ $("#enviar").attr("disabled","disabled"); $.post('salvar.html', $('#usuario').serialize(), function(data){ salvar(data); //crie esta função q vai receber o JSON de retorno e tratá-lo }); } } ); }

No controller fiz algo parecido com isso:

@RequestMapping(value="/blablabla", method=RequestMethod.POST) public @ResponseBody Map<String, String> blablabla(@Valid Usuario usuario, BindingResult result){ Map<String, String> json = new HashMap<String, String>(); try{ //tenta salvar no banco json.put("sucesso", "sucesso"); return json; } catch (DataIntegrityViolationException e) { json.put("erro", "tipoerro"); return json; } catch (Exception e) { json.put("erro", "inesperado"); return json; } }
Algumas coisas eu simplifiquei para nao expor o código totalmente e não confundi-lo.
Dá uma olhada em http://blog.springsource.org/2010/01/25/ajax-simplifications-in-spring-3-0/ tem um outro exemplo. Foi a partir deste tópico q comecei a mexerr com ajax no spring. Me ajudou bastante. Detalhe para usar

melges, em primeiro lugar, obrigada por me ajudar.

Fiz um exemplo seguindo aquele que você me mandou e o da documentação. Tentei passar um json para o Controller, algo assim

var jsonTeste = {"teste":[{"codigo":"2","nome":"Teste1"},{"codigo":"3","nome":"Teste"},{"codigo":"5","nome":"Teste2"}]}; 
	
 $.postJSON(storage.url+'/busca/avancada/resultado/', jsonTeste, function(data) {
		 alert(data);
 });

No meu Controller fiz algo desse tipo


@RequestMapping(value="busca/avancada/resultado/",method=RequestMethod.POST)
public void resultadoBuscaAvancada(@RequestBody Teste teste,HttpServletResponse response){
	String testes = teste.getNome();		
}

class Teste{

	private Long codigo;
	private String nome;
	public Long getCodigo() {
		return codigo;
	}
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	
}

Mas aparece o seguinte erro

Uncaught TypeError: Object function ( selector, context ) {
		// The jQuery object is actually just the init constructor 'enhanced'
		return new jQuery.fn.init( selector, context, rootjQuery );
} has no method 'postJSON'

Tentei alterar meu json, mas sem sucesso… Você consegue ver o que está incorreto?

[]s

dsystem, está dizendo que o método postJSON não existe. O jquery tem o método getJSON, mas não o postJSON.

Se você simplesmente vai buscar algo do servidor, use get e não post. Aí você pode usar o método getJSON. Se você quiser mesmo usar POST, use o método post e especifique o datatype como json:

$.post(url, data, function(data) {...}, 'json');