web-dev-qa-db-fra.com

comment renvoyer un objet du contrôleur à ajax au printemps mvc

Je dois renvoyer la liste des employés du contrôleur à jQuery ajax. Comment dois-je faire pour cela? 

//controller part 
@RequestMapping("phcheck")
public ModelAndView pay(@RequestParam("empid") int empid, String fdate, String tdate) {

   ModelAndView mav = new ModelAndView("phcheck");
   List<Employee> 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 en vue 

//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")
    }
});

});

Merci d'avance.

8
Gorakh

J'ai besoin de cette liste d'employé en ajax

Au printemps, lorsque vous avez besoin de la sérialisation, de la désérialisation et de la conversion des messages. dans ce cas, vous devez annoter votre méthode de gestionnaire de contrôleur avec @RequestBody et @ResponseBody

Où:

  • @ResponseBody: informera le ressort qui tente de convertir sa valeur de retour et l'écrit automatiquement dans la réponse http.
  • @RequestBody: informera le printemps qui tente de convertir le contenu du corps de la demande entrante en votre objet paramètre à la volée.

dans votre cas, vous avez besoin du type JSON, vous devez ajouter @ResponseBody à la signature de votre méthode ou juste au-dessus de la méthode, et produire et consommer des éléments facultatifs, comme:

@RequestMapping(value="phcheck", method=RequestMethod.GET
                produces="application/json")
public @ResponseBody List<Employee> pay(@RequestParam("empid") int empid, String fdate, String tdate) {

  //get your employee list here
  return empList;
}

et dans AJAX appel, utilisez:

  • L'attribut contentType: 'application/json' indique le type de données que vous envoyez. et
  • L'attribut dataType: json indique à jquery le type de contenu de la réponse à recevoir.

dans votre cas, contentType: 'application/json' n'est pas nécessaire, une valeur par défaut, c'est-à-dire 'application/x-www-form-urlencoded; charset=UTF-8' suffit.

et vous pouvez recevoir la liste des employés dans votre succès AJAX, pour itérer dessus faire comme:

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


Remarque:Jackson mapper ou tout autre mappeur doit être disponible sur le chemin de construction afin de pouvoir travailler en sérialisation et désérialisation JSON.

Voir également:

15
Abhishek Nayak
@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()

Dans Spring MVC, vous devez avoir enregistré MappingJackson2HttpMessageConverter comme si vous le faisiez ici

1
geoand

ModelAndView implique que vous prévoyez de rendre une vue, ce que vous ne faites pas. Pour simplement renvoyer l'objet, utilisez l'annotation @ResponseBody:

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

En outre, vous devriez faire plus attention à la manière dont vous traitez les requêtes. Votre requête n'est pas sécurisée et permettrait une injection SQL. Par exemple, si quelqu'un appelle votre méthode avec empId = "'15" ou "1" = "1" ", la liste complète des employés sera alors renvoyée. 

1
DavidA

Définissez la méthode sous la forme @ResponseBody Tapez dans le contrôleur et dans ajax, prenez la fonction List from success.

Placez le fichier Jackson Mapper dans le fichier Pom.xml si vous utilisez Maven.

0
cse