Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Enviar múltiplos objetos por parâmetro para o método

Olá,

Gostaria de saber a melhor forma de enviar mais de um objeto java para um método de um controller via javascript. Consegui fazer o envio de um único objeto e funcionou sem problemas, mas ao tentar fazer com mais de um obtenho sempre um bad request. O código que funcionou foi parecido com o seguinte:

-- javascript:

function salvar() {
   var usuario = {
      "nome" : "joao",
      "cpf" :"1234"
   }
   $.ajax({
      type: "POST",
      contentType : 'application/json; charset=utf-8',
      dataType : 'json',
      url: "salvarUsuario/",
      data: JSON.stringify(usuario), 
      success :function(result) {
       // ..
     }
  });
}

--java:

@RequestMapping(value="/salvarUsuario",method=RequestMethod.POST)
   public  @ResponseBody String  salvarUsuario(@RequestBody Usuario usuario, HttpServletRequest request) {
       System.out.println(usuario.getNome());
   }


public class Usuario {
    private String nome;
    private String cpf;

    // getter e setters 
}

Obrigado desde já.

5 respostas

David, o que você quer é enviar uma lista de usuários para o controller, certo?

Partindo do princípio que sim, como você está tentando fazer o envio de vários objetos e como está tentando receber no controller?

Não tenho certeza absoluta aqui de como deve ser a formatação, mas um objeto json que representa uma lista de usuários seria assim:

var usuarios = [
    {
        "nome":"usuario um",
        "cpf":"123"
    },
    {
        "nome":"usuario dois",
        "cpf":"456"
    },
    {
        "nome":"usuario três",
        "cpf":"789"
    }
];

No controller, isso teria que ser recebido como uma lista de usuários:

@RequestBody List<Usuario> usuarios

Espero que seja a resposta que procura!

Olá Marco!

Obrigado pela resposta. Desculpe, não me expliquei direito, mas o que gostaria de fazer é enviar dois objetos (ou mais) para o controller. No caso, seria algo assim:

public  @ResponseBody String  salvarUsuario(@RequestBody Usuario usuario, @RequestBody Papel papel)

Obrigado pela atenção.

solução!

Hum, agora estarei um pouco mais no escuro, mas acho que consigo te dar uma direção. Um objeto JSON assim seria algo como esse (simplifiquei o conteúdo do usuário e papel).

var dados = {
    "usuario": { },
    "papel": { }
};

Para receber um objeto assim acho que o ideal seria fazer um objeto de transferência de dados, um DTO, que contenha um usuário e um papel:

public class UsuarioPapelDTO {
    private Usuario usuario;
    private Papel papel;

    // getters e setters
}

E no controller receber esse DTO:

public  @ResponseBody String  salvarUsuario(@RequestBody UsuarioPapelDTO dados ...)

Ah sim, bacana. É uma boa forma de contornar.

Muito obrigado!