как вернуть объект из контроллера в ajax весной mvc

Я должен вернуть список сотрудников из контроллера в jQuery ajax. Как мне это сделать?

//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 в поле зрения

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

});

спасибо заранее.

4 ответов


мне нужен этот список сотрудников в ajax

весной, когда вам нужна сериализация объектов, де-сериализация и преобразование сообщений. в этом случае вам нужно аннотировать метод обработчика контроллера с помощью @RequestBody и @ResponseBody.

где:

  • @ResponseBody: сообщит spring, что пытается преобразовать его возвращаемое значение и записать его в ответ http автоматически.
  • @RequestBody: сообщит spring, что пытается преобразовать содержимое тела входящего запроса в ваш объект параметра на лету.

в вашем случае вам нужен тип JSON, вы должны добавить @ResponseBody к вашей подписи метода или как раз над методом, и производит и уничтожает которые опционные, как:

@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;
}

и в AJAX вызовите использование:


@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()

весной MVC вам нужно будет зарегистрировать MappingJackson2HttpMessageConverter, как это делается здесь


ModelAndView подразумевает, что вы планируете отображать представление, которого вы не делаете. Чтобы просто вернуть объект, используйте аннотацию @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();
}

кроме того, вы должны быть более осторожны в обработке запросов. Ваш запрос небезопасен и позволит SQL-инъекций. Например, если кто-то вызвал ваш метод с empId = "'15' или '1'='1'", то он вернет весь список сотрудников.


сделайте метод как тип @ResponseBody в контроллере и в ajax возьмите список из функции успеха.

поместите файл Jackson Mapper в Pom.xml-файл при использовании Maven