как вернуть объект из контроллера в 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