Send List + Parameter for Controller

0

I'm trying to send a list and a parameter to my controller. My controller looks like this:

@RequestMapping("/lista-receitas")
@ResponseBody
public String recebeLista(@RequestBody List<Receita> receitas, @RequestParam("nome") String nome){
    System.out.println("Receita: "+ nome);
    for(Receita r: receitas){
        System.out.println("ID: "+r.getId() +" Nome: "+ r.getNome());
    }

    return "Sucesso";
}

In my method I want to receive a list and a name.

My JavaScritp is as follows:

function lista(){
    var lista=[];
    var Receita = new Object();
    var receitas = $('.receita');

    $(receitas).each(function(i){
        Receita = {
            id: $('#'+receitas[i].id).find("#id").text().trim(),
            nome: $('#'+receitas[i].id).find("#nome").text().trim()
         }
         lista.push(Receita);
   })
   return lista;
}


function enviarLista(){
    var receita = lista();
    var nome = "adm";
    jQuery.ajax({
        type:  'POST',
        //contentType: "application/json",
        url:   'lista-receitas',       
       data:{
            receita:JSON.stringify(receita),
            nome: nome
       },
      //dataType: 'json',
      success: function(data){          
        alert(data);
      } 
  }); 
}

If you just send the list and removing the name parameter my controller works normally.

    
asked by anonymous 17.12.2018 / 13:45

2 answers

0

Try changing the order of Controller parameters

@RequestMapping("/lista-receitas")
@ResponseBody
public String recebeLista(@RequestParam("nome") String nome, @RequestBody List<Receita> receitas){
    System.out.println("Receita: "+ nome);
    for(Receita r: receitas){
        System.out.println("ID: "+r.getId() +" Nome: "+ r.getNome());
    }

    return "Sucesso";
}
    
17.12.2018 / 14:07
0

If you are using spring vc you can use these syntax

@RequestMapping(value = "lista-receitas",method = RequestMethod.POST,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})

or

@PostMapping("lista-receitas")
    
17.12.2018 / 19:02