come restituire l’object dal controller ad ajax in spring mvc

Devo restituire l’elenco dei dipendenti da Controller a jQuery ajax. Come dovrei fare per questo?

//controller part @RequestMapping("phcheck") public ModelAndView pay(@RequestParam("empid") int empid, String fdate, String tdate) { ModelAndView mav = new ModelAndView("phcheck"); List emp=entityManager.createQuery("select e from Employee e where e.empId="+empid, Employee.class).getResultList(); mav.addObject("emp", emp); <----I need this list of employee in ajax return mav; } 

Ajax in vista

 //Ajax part $(document).ready(function () { $("#empid").change(function () { if ($("#fdate").val() != "" && $("#tdate").val() != "" && $("#empid").val() != "") { jQuery.ajax({ url: "phcheck.htm?empid=" + $("#empid").val() + "&&fdate=" + $("#fdate").val() + "&&tdate=" + $("#tdate").val(), success: function (data) { alert(data + "success"); }, error: function (data) { alert(data + "error"); } }); } else { alert("Please fill the from date and to date or select the employee id"); $("#empid .option").attr("selected", "selected") } }); 

});

Grazie in anticipo.

Ho bisogno di questo elenco di dipendenti in ajax

In spring quando avete bisogno di serializzazione degli oggetti, de-serializzazione e conversione dei messaggi. in tal caso è necessario annotare il metodo del gestore del controller con @RequestBody e @ResponseBody .

Dove:

  • @ResponseBody : informsrà molla che tenta di convertire il suo valore di ritorno e scriverlo automaticamente alla risposta http.
  • @RequestBody : informsrà molla che tenta di convertire al volo il contenuto del corpo della richiesta in arrivo sull’object parametro.

nel tuo caso hai bisogno del tipo JSON, devi aggiungere @ResponseBody alla firma del metodo o appena sopra il metodo, e produce e consuma che sono opzionali, come:

 @RequestMapping(value="phcheck", method=RequestMethod.GET produces="application/json") public @ResponseBody List pay(@RequestParam("empid") int empid, String fdate, String tdate) { //get your employee list here return empList; } 

e nell’uso della chiamata AJAX:

  • contentType: 'application/json' attributo contentType: 'application/json' indica il tipo di dati che stai inviando. e
  • dataType: json attributo dataType: json dice a jquery quale tipo di contenuto riceverà la risposta.

nel tuo caso contentType: 'application/json' non è necessario, di default uno cioè 'application/x-www-form-urlencoded; charset=UTF-8' 'application/x-www-form-urlencoded; charset=UTF-8' è sufficiente.

e puoi ricevere l’elenco degli impiegati nel tuo successo AJAX, per iterare su di esso fai come:

  success: function (data) { $.each(data, function(index, currEmp) { console.log(currEmp.name); //to print name of employee }); }, 

Nota: il mapper Jackson o qualsiasi altro mapper dovrebbe essere disponibile su buildpath per poter lavorare serializza e deserializzare JSON.

Guarda anche:

  • Nuove funzionalità in spring mvc 3.1
 @RequestMapping(value = "phcheck", produces = "application/json") @ResponseBody public ModelAndView pay(@RequestParam("empid") int empid, @RequestParam("fdate") String fdate, @RequestParam("tdate") String tdate) { return entityManager.createQuery("select e from Employee e where e.empId="+empid, Employee.class).getResultList(); } url:"phcheck.htm?empid="+$("#empid").val()+"&fdate="+$("#fdate").val()+"&tdate="+$("#tdate").val() 

In Spring MVC dovrai registrare MappingJackson2HttpMessageConverter come se fosse stato fatto qui

ModelAndView ti suggerisce di eseguire il rendering di una vista, cosa che non lo fai. Per restituire l’object, utilizzare l’annotazione @ResponseBody:

 @RequestMapping("phcheck") public @ResponseBody List pay(@RequestParam("empid") int empid, String fdate, String tdate) { return entityManager.createQuery("select e from Employee e where e.empId="+empid, Employee.class).getResultList(); } 

Inoltre, dovresti essere più attento a come gestisci le query. La tua query non è sicura e consentirebbe l’iniezione sql. Ad esempio, se qualcuno ha chiamato il tuo metodo con empId = “’15’ o ‘1’ = ‘1’”, restituirebbe l’intero elenco di dipendenti.

Rendi il metodo come @ResponseBody Type nel controller e in ajax prendi l’Elenco dalla funzione success.

Metti il ​​file Jackson Mapper nel file Pom.xml se usi Maven