3
respostas

AngularJs consultar dados Enviando objeto para o filtro.

Salve a todos.

eu tenho um WS escrito no Spring que me recebe um objeto como filtro e devolve uma lista de dados.

no meu Service Java:

@ResponseBody
@RequestMapping(value="/{filtro}",method=RequestMethod.GET)
public Datatable listar(@RequestBody PessoaFiltro filtro) throws Exception {
    /*Codigo não importante omitido aqui*/
}

no meu Service angularJS:

angular.module('datatablePessoaFactory', ['ngResource'])
    .factory('datatablePessoaService', function($resource) {
        var recurso = $resource('/datatable-pessoa/:filtro', {filtro:'@filtro'}, 
                {'update': { method:'PUT'}
            }
        );
        return recurso;
    }
);

a chamada no controller JS:

datatablePessoaService.get({'filtro':vm.filtro},
    function(dados){
        vm.datatablePessoas = dados;
    },            
    function(erro){
        console.log(erro);
    }
);

toda via eu não consigo realizar a consulta, pois, pelo que pude entender o metodo GET não aceita a passagem de objetos complexos.

então minha pergunta é como eu posso fazer uma consulta eu que preciso passar um objeto complexo?

3 respostas

Boa tarde Alexandre.

Voce tem duas opções.

Opção 1: No WS vc pode receber os parametros do filtro como QueryParam e instanciar a classe PessoaFiltro através desses atributos. Nessa opção, voce teria que adaptar o seu front para passar os atributos de filtro dessa forma.

Opção 2: Voce pode passar esse objeto através do método POST.

Como as convenções do REST determinam que pra leitura de um recurso voce deve usar sempre o GET, eu aconselho a primeira opção.

Espero ter ajudado

Grato pela resposta.

eu entendo que as boas praticas dizem para não usar o POST para consultar, mas são 10 ou 12 parâmetros e os passar um a um pela url me parece ainda pior =|.

acredito que irei pela segunda alternativa,muito me espanta o Angular não tem um solução melhor para isso.

Não é uma questão do angular e sim do protocolo HTTP em si. Pode marcar minha resposta como solução?